Comme Android est sérieux en matière de sécurité et essaie de sécuriser les nouvelles versions Android), il devient difficile pour les développeurs de se tenir à jour avec les nouvelles fonctionnalités de sécurité et trouver d'anciennes méthodes alternatives pour rendre leur application compatible avec les anciennes fonctionnalités.
Cette question concerne l'IMEI dans le nouveau Android 10! L'ancienne méthode était super facile d'obtenir le numéro IMEI en utilisant le code ci-dessous
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();
}
Dans New Android 10, il est désormais limité d'obtenir le numéro IMEI. Selon la documentation Android
les applications doivent avoir l'autorisation privilégiée READ_PRIVILEGED_PHONE_STATE pour accéder aux identifiants non réinitialisables de l'appareil, qui incluent à la fois IMEI et le numéro de série.
Le problème est que lorsque nous essayons de demander des autorisations d'exécution avec
Android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
Mon compilateur ne reconnaît pas ces autorisations et j'ai eu une erreur sur cette ligne, mais lorsque je demande cette autorisation dans le fichier manifeste, il reconnaît cette ligne mais en avertissant que cette autorisation est uniquement pour les applications système.
Je veux rendre mon application compatible avec Android 10 et je veux obtenir IMEI. Comment puis-je obtenir le numéro IMEI dans Android 10 sans devenir propriétaire de l'appareil ou propriétaire du profil) ?
Pour obtenir un identifiant unique, vous pouvez utiliser FirebaseInstanceId.getInstance().getId();
ou String uniqueID = UUID.randomUUID().toString();
. Jetez un œil ici pour les meilleures pratiques https://developer.Android.com/training/articles/user-data-ids#Java
Android 10 Développeur restreint pour accéder au numéro IMEI.
Vous pouvez avoir une autre solution en obtenant l'ID du logiciel. Vous pouvez utiliser l'ID logiciel comme un identifiant unique. Veuillez trouver ci-dessous le code que j'utilise dans l'application.
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;
}