web-dev-qa-db-fra.com

L'autorisation d'exécution Android READ_PHONE_STATE demande de passer et de gérer des appels téléphoniques

Dans l'application, je souhaite obtenir un identifiant unique via TelephonyManager.getDeviceId(). Pour utiliser cela, j'ai besoin de cette permission READ_PHONE_STATE. Le problème est avec l'autorisation d'exécution sur Android 6. Dans la boîte de dialogue contextuelle d'autorisation d'exécution, il vous est demandé d'accorder l'autorisation "Faire et gérer des appels téléphoniques" , ce qui peut dissuader les utilisateurs d'utiliser l'application. Ce qui peut être fait? Ou puis-je obtenir un autre identifiant unique pour le périphérique sans utiliser une telle permission?

TelephonyManager TM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

String deviceId = TM.getDeviceId();
9
Rafael

J'utilise ceci comme identifiant unique de périphérique dans mon application et je n'ai besoin d'aucune autorisation d'exécution.

String Android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
                Settings.Secure.Android_ID);

ou vous pouvez utiliser ceci

 String uuid = UUID.randomUUID().toString();
8
Hammad Tariq

Demander une permission à un certain groupe de permissions ouvre une boîte de dialogue accordant à toutes les permissions de ce groupe (à condition que vous les ayez également demandées dans votre manifeste).

Exemple: demandez READ_PHONE_STATE et CALL_PHONE dans le manifeste. Demander juste READ_PHONE_STATE au moment de l'exécution. Obtenez présenté avec le dialogue d'autorisation. Vérifiez que les deux autorisations vous ont été accordées.

Liste des autorisations dangereuses et des groupes d’autorisations: https://developer.Android.com/guide/topics/permissions/requesting.html

Ce comportement n'a pas changé depuis Android 6 mais peut être modifié à l'avenir.

3
Eugen Pechanec