Intenta interpretar el código de forma correcta previamente a usarlo a tu proyecto y si tquieres aportar algo puedes dejarlo en los comentarios.
Solución:
Android Q ha restringido el acceso tanto para IMEI como para el número de serie. Está disponible solo para plataformas y aplicaciones con permiso especial del operador. Además, el permiso READ_PRIVILEGED_PHONE_STATE no está disponible para aplicaciones que no sean de plataforma.
Si intenta acceder arroja la siguiente excepción
java.lang.SecurityException: getImeiForSlot: The user 10180 does not meet the requirements to access device identifiers.
Consulte la documentación: https://developer.android.com/preview/privacy/data-identifiers#device-ids
Consulte también Problema
Esto simplemente no funcionaría a partir de Android Q. Las aplicaciones de terceros no pueden usar IMEI ni el número de serie de un teléfono y otros identificadores de dispositivos no reiniciables.
Los únicos permisos que pueden usarlos son READ_PRIVILEGED_PHONE_STATE y no pueden ser utilizados por aplicaciones de terceros: aplicaciones de fabricación y software. Si usa ese método, obtendrá un error de excepción de seguridad u obtendrá null .
Todavía puede intentar obtener una identificación única usando:
import android.provider.Settings.Secure;
private String android_id = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);
Llego tarde para publicar la respuesta. Todavía creo que mi respuesta ayudará a alguien. Android 10 Desarrollador restringido para acceder al número IMEI.
Puede tener una solución alternativa obteniendo ID de software. Puede usar la identificación del software como una identificación única. Encuentre el código a continuación como lo uso en la aplicación.
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;
Te mostramos reseñas y puntuaciones
No se te olvide comunicar este ensayo si te fue útil.