Получение номера IMEI без разрешения времени выполнения - PullRequest
0 голосов
/ 16 марта 2020

Есть ли способ получить IMEI (GSM) / MEID (CDMA) без применения разрешения во время выполнения? Я включил следующее разрешение в Android, однако для некоторых устройств я получаю номер IMEI, а для некоторых Android устройств я получаю свой номер IMEI, а для некоторых устройств я получаю исключение {Java .Lang.SecurityException: getDeviceId в Java .Interop.JniEnvironment + InstanceMethods ... Почему я должен обрабатывать разрешения во время выполнения, несмотря на перечисление их в Манифесте?

    var telephonyManager = (TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService);
    if (telephonyManager != null)
    {
        sIMEI = telephonyManager.DeviceId;
    }

Если нет другого способа чем дать разрешение во время выполнения и затем получить IMEI, кто-то может предложить лучший способ получить уникальный идентификатор для устройства android программным способом. (Идентификатор устройства также должен быть виден с устройства). Я попробовал нижеприведенное, но в нескольких постах говорится, что AndroidId не всегда одинаковый.

 var android_id = Android.Provider.Settings.Secure.GetString(Forms.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);

1 Ответ

1 голос
/ 16 марта 2020

Ответ НЕТ. Если вы работаете с Marshmallow или более поздней версией, вам необходимо разрешение android.permission.READ_PHONE_STATE для доступа к идентификатору устройства.

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

String uniqueID = UUID.randomUUID().toString();

ИЛИ вы можете перейти по ссылке ниже для получения дополнительных опций

deviceID

...