70 votes

Permissions Android : Appels téléphoniques : lire l'état et l'identité du téléphone

Mon application Android n'a rien à voir avec les appels téléphoniques, mais je constate que lorsque j'installe une version de débogage sur mon appareil de test, elle requiert les autorisations "Appels téléphoniques : lire l'état et l'identité du téléphone". (Je ne fais aucune mention de cela dans AndroidManifest.xml ).

J'aimerais avoir le moins d'autorisations possible, et je me demandais si quelqu'un savait comment s'en débarrasser ? J'ai commenté la partie où j'enregistrais des données à partir de Build.MODEL , Build.VERSION.* etc. J'ai également commenté la partie où je détectais l'orientation paysage/portrait en pensant que cela pouvait être l'"état du téléphone". Mais ni l'un ni l'autre n'a semblé supprimer la permission requise.

J'ai trouvé ce rapport de bug : http://code.google.com/p/Android/issues/detail?id=4101 mais il est marqué "working-as-intended" avec une note sur les permissions qui sont correctes depuis le marché mais pas autrement. Est-ce l'expérience d'autres personnes ? (Je ne voudrais pas avoir à publier sur le marché juste pour tester cela.) Sinon, quelqu'un sait-il s'il existe une API que je peux éviter d'appeler et qui fera en sorte que mon application n'ait pas besoin de cette permission ?

Merci !

90voto

Mike Kale Points 2872

(Je réponds à ma propre question au cas où quelqu'un d'autre rencontrerait ce problème et le rechercherait).

En fouillant dans PackageParser.java dans le code source d'Android, j'ai découvert que le système attribue automatiquement les éléments suivants

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE

à toute application qui déclare une version de targetSdk inférieure à 4 (donut). Il doit y avoir une raison de compatibilité pour cela, peut-être que les applications ciblant des versions plus anciennes pourraient supposer qu'elles ont ces permissions sans les déclarer explicitement. Donc, si vous ne voulez pas que ces permissions soient ajoutées implicitement à votre application, ajoutez une section comme la suivante dans AndroidManifest.xml

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />

C'est tout.

Amusez-vous bien, -Mike

24voto

mbaird Points 31293

Android 1.6 changelog : http://developer.Android.com/sdk/Android-1.6.html#api

ÉCRITURE_MÉMOIRE_EXTERNE : Permet à une application d'écrire sur des externe. Les applications utilisant le niveau API 3 et inférieur se verront implicitement accorder cette permission (et cela sera visible pour l'utilisateur) ; Applications utilisant le niveau 4 de l'API ou plus doivent demander explicitement cette permission.

Mais ce n'est que l'un d'entre eux. Pour une raison quelconque, le journal officiel des modifications ne contient pas les informations relatives à READ_PHONE_STATE. L'histoire complète est éclaircie ici : http://blogs.zdnet.com/Burnette/?p=1369&page=3

Nouvelles permissions. 1.6 Les programmes doivent demander explicitement le ÉCRITURE_MÉMOIRE_EXTERNE l'autorisation de être en mesure de modifier le contenu de la carte SD, et ils doivent explicitement demander la READ_PHONE_STATE la permission de pouvoir être en mesure de récupérer les informations sur l'état du téléphone. Apps visant des versions antérieures demanderont toujours demanderont toujours ces autorisations de manière implicite.

Comme vous pouvez le constater, il est impossible de publier une application destinée à la version 1.5 ou antérieure sans demander ces autorisations lorsqu'elle est installée sur des téléphones fonctionnant avec la version 1.6 ou supérieure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X