Нет IMEI для разработчиков Android в Android 10

Поскольку Android серьезно относится к безопасности и пытается сделать новые версии Android более безопасными, разработчикам становится все труднее следить за новыми функциями безопасности и находить альтернативы старым методам, чтобы сделать свое приложение совместимым со старыми функциями.

Этот вопрос касается IMEI в новом Android 10! Старый метод был очень простым для получения номера IMEI с помощью приведенного ниже кода.

  String deviceId = "";

    if (Build.VERSION.SDK_INT >= 26) {
        if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
            deviceId = telMgr.getMeid();
        } else if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
            deviceId = telMgr.getImei();
        } else {
            deviceId = ""; // default!!!
        }
    } else {
        deviceId = telMgr.getDeviceId();
    }

В новом Android 10 теперь ограничено получение номера IMEI. Согласно документации Android

приложения должны иметь привилегированное разрешение READ_PRIVILEGED_PHONE_STATE для доступа к не сбрасываемым идентификаторам устройства, которые включают как IMEI, так и серийный номер.

Проблема в том, что когда мы пытаемся запросить разрешения времени выполнения с

  android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE

Мой компилятор не распознает эти разрешения, и я получил ошибку в этой строке, но когда я прошу это разрешение в файле манифеста, он распознает эту строку, но с предупреждением, что это разрешение предназначено только для системных приложений.

Я хочу сделать свое приложение совместимым с Android 10 и получить IMEI. Как я могу получить номер IMEI в Android 10, не становясь владельцем устройства или владельцем профиля?


person Zaeem Sattar    schedule 18.09.2019    source источник
comment
вы не можете получить доступ к IMEI в Android 10, если не разрабатываете приложение системного уровня. Однако вы можете использовать и другие уникальные идентификаторы: developer.android.com/training/articles/ идентификаторы-данных-пользователя   -  person Nikos Hidalgo    schedule 18.09.2019
comment
Возможный дубликат Я получаю нулевой IMEI в Android Q?   -  person Nikos Hidalgo    schedule 18.09.2019


Ответы (3)


Только приложения владельца устройства могут считывать уникальные идентификаторы, или ваше приложение должно быть системным с READ_PRIVILEGED_PHONE_STATE. Вы не можете запросить это разрешение для обычного приложения.

person greywolf82    schedule 19.09.2019
comment
с приложением владельца устройства можем ли мы получить IMEI в Android 10? - person Ahmad; 20.03.2021
comment
Да, ты можешь сделать это - person greywolf82; 20.03.2021
comment
есть ли возможность получить это разрешение программно без рута? - person Ahmad; 25.03.2021
comment
Нет, ты не можешь этого сделать. - person greywolf82; 25.03.2021
comment
Слишком сложно внедрить последние патчи: / Вы хотите дать мне какое-нибудь предложение по легкому рутированию? - person Ahmad; 25.03.2021

Android 10 Разработчик с ограниченным доступом к номеру IMEI.

Вы можете получить альтернативное решение, получив Software ID. Вы можете использовать идентификатор программного обеспечения как уникальный идентификатор. Пожалуйста, найдите ниже код, который я использую в приложении.

 public static String getDeviceId(Context context) { 

    String deviceId;

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

deviceId = Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID);

}else {

final TelephonyManager mTelephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);



     if (mTelephony.getDeviceId() != null) {
            deviceId = mTelephony.getDeviceId();
        } else {
            deviceId = Settings.Secure.getString(
                    context.getContentResolver(),
                    Settings.Secure.ANDROID_ID);
        }
    }

return deviceId;

}
person Satish    schedule 06.01.2020

Чтобы получить уникальный идентификатор, вы можете использовать FirebaseInstanceId.getInstance().getId(); или String uniqueID = UUID.randomUUID().toString();. Здесь вы найдете лучшие практики https://developer.android.com/training/articles/user-data-ids#java

person Joe Malebe    schedule 30.09.2019