#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 или выше.
Ответ №2:
В новых устройствах Device ID
вместо этого используйте
String dev_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);