Kotlin: TelephonyManager.getImei () Для вызова требуется разрешение, которое может быть отклонено пользователем - PullRequest
0 голосов
/ 16 мая 2019

Я разрабатываю приложение для Android с Kotlin, я использую API 28. Я хочу получить номер устройства. В начале я использую TelephonyManager.deviceId, после некоторых исследований я обнаружил, что он устарел.
Я нашел в качестве решения, замените deviceId на getImei () Следующая выдержка из моего кода:

 val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        if (telephonyManager != null) {

            val androidID = Settings.Secure.getString(this.contentResolver, Settings.Secure.ANDROID_ID)
            if (androidID != null) {
                Utility().DEVICE_ID = androidID
                Utility().setDataBykeyValue(applicationContext, AppController.SHAIRD_PREF_DEVICE_ID, androidID)
            } else {
                val devId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) telephonyManager.getImei()
                 else telephonyManager.getDeviceId()
                Utility().DEVICE_ID  = devId
                Utility().setDataBykeyValue(applicationContext, AppController.SHAIRD_PREF_DEVICE_ID, devId)
            }
            Utility().CARRIER = telephonyManager.simOperatorName

        }

Также я добавляю это разрешение в мой AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

"telephonyManager.getImei ()" подчеркивается красной линией, и появляются следующие сообщения:

Для вызова требуется разрешение, которое может быть отклонено пользователем: код должен явно проверьте, если разрешение доступно (с checkPermission) или явно обработать потенциальный

Я хочу знать, в чем проблема и как я могу ее исправить

1 Ответ

1 голос
/ 16 мая 2019

Для Java:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
   if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
     requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
   } else {
       // else for if they have already given permission
   }
}

Вы также можете проверить этот учебник: https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/

Для Kotlin:

 val permission = ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_PHONE_STATE)

 if (permission != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 1)
  }

Вы также можете проверить этот учебник:https://www.techotopia.com/index.php/Kotlin_-_Making_Runtime_Permission_Requests_in_Android

...