Cette question me préoccupe depuis longtemps. Alors maintenant, finalement, j'ai décidé d'aller au fond des choses.
Le Playstore a une application nommée permission.READ_PHONE_STATE , qui demande READ_PHONE_STATE
l’autorisation unique et ne fait rien d’autre que l’impression de toutes les données auxquelles elle peut accéder avec ou sans l’utiliser. Je l'ai installé sur mon LG Optimus 4X , enraciné sur Android 4.0.3, et révoqué l'autorisation à l'aide de LBE. Les résultats étaient plutôt intéressants, comme le montrent les captures d'écran suivantes:
Informations recueillies par l'application permission.READ_PHONE_STATE (cliquez sur les images pour agrandir les variantes)
Comme vous pouvez facilement le constater, même certaines informations, même inaccessibles sans autorisation, étaient librement accessibles: mon numéro de boîte vocale (remarque: oui, c’est le bon; avec mon fournisseur, c’est le raccourci clavier pour composer un numéro à partir de votre propre appareil. l'afficher librement;) À la fin de la première capture d'écran, vous voyez:
CALL_STATE_IDLE
. Donc, aucun appel téléphonique entrant, sortant ou en cours. Aucune application n'a besoin de cette permission pour se "mettre en arrière-plan" lors d'appels entrants.
Il est même possible de voir si les données mobiles sont actives ( DATA_DISCONNECTED
j'ai utilisé le WiFi lors de la capture d'écran, comme vous pouvez le voir dans la barre de notification), dans quel pays vous êtes, votre fournisseur (y compris des données techniques sur lui), si vous avez une carte SIM, ou si vous êtes en itinérance.
Les seules choses qui ne sont pas accessibles sont donc les données d'identification: IMEI, SIMID, IMSI et votre propre numéro de téléphone.
Conclusion: cette autorisation est nécessaire uniquement à des fins d'identification, rien d'autre.
Pourquoi tant d'applications ont-elles besoin alors?
- Pour les modules publicitaires, le plus probable 1
- Parce que le développeur pensait en avoir besoin (comme l'indiquent certaines réponses ici) 2
- Parce que l'application en question est conçue pour (aussi) fonctionner sur Android 1.5 et inférieur (facile à trouver, comme cela est répertorié sur Google Play ).
Les probabilités dans exactement cet ordre, IMHO.
1 Note du message de Dan sur le chat :
Les règles de Google Play interdisent désormais aux applications de se faire identifier par votre IMEI à des fins publicitaires. Toutes les bibliothèques d'annonces ont été mises à jour pour utiliser "l'identifiant publicitaire" fourni par Google Play Services, de sorte que toutes les personnes qui utilisent encore l'IMEI à cette fin doivent être signalées à Google.
Comme il est difficile pour l'utilisateur de dire en quoi l'application utilise l'IMEI, vous devez d'abord demander au développeur de vous expliquer.
2 Un autre développeur me montra une différence subtile: alors que l'autorisation n'est pas nécessaire de lire l'état de l' appel en cours (comme je l' ai fait remarquer), il pourrait être nécessaire d'enregistrer un auditeur afin d'être informé sur les changements de l'appel statut (voir: Détection des appels téléphoniques entrants et sortants sur Android ). Bien qu'il semble y avoir des moyens de gérer cela automatiquement lorsque le système appelle onPause
, cela peut ne pas toujours être approprié: pensez à votre réveil. Vous souhaiterez peut-être que cela ne soit pas automatiquement arrêté lors d'un appel entrant - en particulier si votre profil est défini sur le volume de la sonnerie "muet".
3 Encore une correction de Dan : vous n'obtenez l'autorisation supplémentaire par défaut que si la version "cible" de votre application est 1.5. Si vous ciblez une version ultérieure mais que votre version minimale est 1.5, l'autorisation ne sera pas ajoutée automatiquement.
Mises à jour
- Intéressant qu’il existe un problème en suspens (21504) à diviser
READ_PHONE_STATE
en ce qui est nécessaire pour a) détecter les appels entrants et connexes (téléphonie), ainsi qu’une deuxième autorisation pour les détails d’identification (IMEI, IMSI, etc.). Ouvert le 11/2011, toujours pas travaillé. Commencez si intéressé :)
- Et oui, il y a un moyen d'atteindre le même (détection des appels entrants) sans l'
READ_PHONE_STATE
autorisation, comme par exemple souligné par Arno Welzel . Comme un appel téléphonique entrant déclencherait la sonnerie, cet événement pourrait être utilisé avec onAudioFocusChange()
, ce qui ne nécessite aucune autorisation spéciale: s'il est déclenché par cela, l'application pourrait vérifier l'état de CallState (encore une fois, sans qu'aucune autorisation spéciale ne soit requise) appel entrant.