получить номер IMEI телефона с Android версии 8.1 в качестве telephonyManager.getDeviceId ();осуждается после зефира - PullRequest
0 голосов
/ 30 мая 2018
@SuppressLint({"MissingPermission", "NewApi"})
public void getDeviceIMEI() {
    String deviceUniqueIdentifier = null;
    String deviceImei = null;
    if (null != telephonyManager) {
        deviceUniqueIdentifier = telephonyManager.getDeviceId();
        Log.d("Output_getDeviceIMEI", deviceUniqueIdentifier + "");
    }
//   

     if (null == deviceUniqueIdentifier || 0 == deviceUniqueIdentifier.length()) {
//            deviceUniqueIdentifier = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
//            Log.d("Output_getDev_null", deviceUniqueIdentifier + "");
//        }

    if (null != telephonyManager) {
        if ( Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            deviceImei = telephonyManager.getImei();
            Log.d("Output_deviceImei_IMEI", deviceImei + "");
        }

    }
    if (null == deviceImei || 0 == deviceImei.length()) {
        deviceImei = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
        Log.d("Output_deviceImei", deviceImei + "");
    }

}

1 Ответ

0 голосов
/ 30 мая 2018

Начиная с Android 8, вам нужно использовать getImei (int slotIndex) для получения IMEI устройства.

Вам также необходимо добавить разрешение <uses-permission android:name="android.permission.READ_PHONE_STATE"/> в свой AndroidManifest.xml

Не забудьте реализовать модель разрешений для запроса разрешений во время выполнения следующим образом:

ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.READ_PHONE_STATE},
                    1);
@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1: {

          // If request is cancelled, the result arrays are empty.
          if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

               //continue using `getImei()` or `getDeviceId()`  
            } else {

               //Use device Id or use fallback case
            }
            return;
        }   
    }
}
...