Не удается получить номер SIM-карты и IMEI телефона в Android 11

#java #android #kotlin

Вопрос:

Я хочу получить номер SIM-карты и IMEI с телефона Android. В Android 9 или более поздней версии я могу получить его правильно, но в обновленной версии он раздавил приложение и не может получить номер телефона. Мне это нужно, потому что нужно правильно определить мобильный телефон, на котором установлен opt и мое приложение. Мой исходный код выглядит так, как нравится.

  TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    String simID = telephonyManager.getSimSerialNumber();
    String telNumber = telephonyManager.getSubscriberId();
    String IMEI = telephonyManager.getDeviceId();
 

Я также добавляю необходимое разрешение, например.

         if (ActivityCompat.checkSelfPermission(this, "android.permission.READ_PRIVILEGED_PHONE_STATE") != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_PRIVILEGED_PHONE_STATE"}, 111);

        return false;
        }
 

Также я добавляю разрешение READ_PHONE_STATE и READ_PHONE_NUMBERS.

Ответ №1:

С Android 10 и выше вам необходимо разрешение «READ_PRIVILEGED_PHONE_STATE» для чтения IMEI. Но это разрешение предоставляется только системным приложениям. Таким образом, нет никакого способа получить IMEI в Android 10 или выше.

Пожалуйста, обратитесь к документации: https://developer.android.com/preview/privacy/data-identifiers#device-ids

Прочтите это тоже

Ответ №2:

В новых устройствах Device ID вместо этого используйте

 String dev_id = Secure.getString(getContext().getContentResolver(),
                                                    Secure.ANDROID_ID);