Я получаю IMEI нулевой в Android Q? - PullRequest
5 голосов
/ 15 марта 2019

Я получаю нулевой IMEI ID из телефонного менеджера. Что делать?

есть ли обходной путь для этого?

Ответы [ 4 ]

4 голосов
/ 09 апреля 2019

Android Q ограничил доступ как для IMEI, так и для серийного номера. Он доступен только для платформы и приложений со специальным разрешением оператора. Также разрешение READ_PRIVILEGED_PHONE_STATE недоступно для неплатформенных приложений.

Если вы пытаетесь получить к нему доступ, выдает ниже исключение

java.lang.SecurityException: getImeiForSlot: The user 10180 does not meet the requirements to access device identifiers.

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

Также см. Выпуск

1 голос
/ 15 марта 2019

Для получения IMEI это также шаги:

1) Определить разрешение в манифесте:

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

или если уровень API> 22 * ​​1006 *

ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)

2) Получить IMEI в Java с помощью TelephonyManager

((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId()

Скомпилируйте оба (1) и (2) пункта:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            imei = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
        }
    } else {
        imei = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
    }
0 голосов
/ 19 июля 2019

это просто не будет работать с Android Q, любые сторонние приложения не могут использовать IMEI no или серийный номер телефона и другие не сбрасываемые идентификаторы устройства

только разрешения, которые могут использовать этиREAD_PRIVILEGED_PHONE_STATE, который не может использоваться никакими сторонними приложениями

Приложения для производства и программного обеспечения

, если вы все еще используете метод, который вы используете, вы получите ошибку безопасности исключение или получите ноль

вы все еще можете попытаться получить уникальный идентификатор с помощью

import android.provider.Settings.Secure;

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

, но для получения номера IMEI вы просто не сможете сделать это, если вы не создаете приложение, которое является системным или нестороннее приложение

0 голосов
/ 28 июня 2019

Tldr;IMEI просто недоступен на Android Q +

При ориентации на Android Q сторонние приложения вообще не могут получить доступ к IMEI.Android Q doc вводит в заблуждение, заявляя

Начиная с Android Q, приложения должны иметь привилегированное разрешение READ_PRIVILEGED_PHONE_STATE, чтобы получить доступ к не сбрасываемым идентификаторам устройства, которые включают в себя как IMEI, так и серийный номер.https://developer.android.com/preview/privacy/data-identifiers#device-ids

Но когда я действительно пытался реализовать это, я получаю это исключение:

java.lang.SecurityException: getDeviceId: The user 10132 does not meet the requirements to access device identifiers.

Кто-то сообщил об этом на системе отслеживания проблем Google, где Googler сказал, что этоэто предполагаемое поведение, а IMEI для Q + доступен только для приложений системного уровня.

Состояние: не будет исправлено (поведение по назначению). Это работает по назначению.IMEI - это персональный идентификатор, и он не выдается приложениям в соответствии с политикой.Обходного пути нет.

https://issuetracker.google.com/issues/129583175#comment10

...