Diese Frage hat mich schon länger beschäftigt. Nun endlich habe ich mich entschlossen, dem Thema auf den Grund zu gehen.
Der Playstore verfügt über eine App namens permission.READ_PHONE_STATE , die READ_PHONE_STATE
als einzige Berechtigung anfordert und nichts anderes tut, als alle Daten auszudrucken, auf die er zugreifen kann, mit oder ohne sie zu verwenden. Ich habe das auf meinem LG Optimus 4X installiert, das auf Android 4.0.3 verwurzelt ist, und die Erlaubnis mit LBE widerrufen. Die Ergebnisse waren ziemlich interessant, wie die folgenden Screenshots zeigen:
Mit der App- Berechtigung gesammelte Informationen.READ_PHONE_STATE (Bilder anklicken für größere Varianten)
Wie Sie leicht sehen können, waren sogar einige Informationen, auf die der Entwickler ohne Erlaubnis nicht zugreifen konnte, frei zugänglich: meine Mailbox-Nummer (Anmerkung: Ja, es ist die richtige; bei meinem Provider ist das die Abkürzung, wenn Sie von Ihrem eigenen Gerät aus wählen, also kann ich zeige es frei an;) Am Ende des ersten Screenshots siehst du:
CALL_STATE_IDLE
. Also kein eingehender, ausgehender oder laufender Anruf. Keine App benötigt diese Berechtigung, um sich bei eingehenden Anrufen im Hintergrund zu "verhalten".
Es ist sogar möglich zu sehen, ob mobile Daten aktiv sind ( DATA_DISCONNECTED
ich war beim Aufnehmen der Screenshots im WLAN, wie Sie in der Benachrichtigungsleiste sehen können), in welchem Land Sie sich befinden, bei Ihrem Anbieter (einschließlich einiger technischer Daten zu ihm), ob Sie haben eine SIM-Karte oder sind im Roaming.
Die einzigen Dinge, auf die nicht zugegriffen werden kann, sind identifizierende Daten: IMEI, SIMID, IMSI und Ihre eigene Telefonnummer.
Fazit: Diese Erlaubnis wird nur zu Identifikationszwecken benötigt, sonst nichts.
Warum brauchen es dann so viele Apps?
- Für die Anzeigenmodule am wahrscheinlichsten 1
- Weil der Entwickler dachte, er brauche es (wie in einigen Antworten hier angegeben). 2
- Weil die betreffende App (auch) für Android 1.5 und niedriger ausgelegt ist (leicht herauszufinden, wie bei Google Play aufgeführt ).
Wahrscheinlichkeiten in genau dieser Reihenfolge, IMHO.
1 Anmerkung von Dans Beitrag im Chat :
Die Google Play-Richtlinie verbietet Apps nun, Ihre IMEI zu veranlassen, Sie zu Werbezwecken zu identifizieren. Alle Anzeigenbibliotheken wurden jetzt aktualisiert, um die von Google Play Services bereitgestellte "Werbe-ID" zu verwenden. Daher sollten alle, die noch die IMEI für diesen Zweck verwenden, an Google gemeldet werden.
Da der Benutzer nur schwer erkennen kann, wofür die App die IMEI verwendet, sollten Sie den Entwickler bitten, dies zuerst zu erläutern.
2 Ein anderer Entwickler hat mich nur auf einen subtilen Unterschied hingewiesen: Während die Berechtigung nicht erforderlich ist, um den aktuellen Anrufstatus zu lesen (wie ich darauf hingewiesen habe), muss möglicherweise ein Listener registriert werden, um über Änderungen des Anrufs benachrichtigt zu werden Status (siehe: Erkennen eingehender und ausgehender Anrufe unter Android ). Es scheint zwar Mittel zu geben, um dies automatisch zu handhaben, wenn das System aufruft , dies ist jedoch möglicherweise nicht immer geeignet: Denken Sie an Ihren Wecker. Möglicherweise möchten Sie nicht, dass dies bei einem eingehenden Anruf automatisch gestoppt wird. Dies gilt insbesondere dann nicht, wenn in Ihrem Profil die Ruftonlautstärke "stummgeschaltet" ist.onPause
3 Wieder eine Korrektur von Dan : Sie erhalten die Standard-Extra-Berechtigung nur, wenn die "Ziel" -Version Ihrer App 1.5 ist. Wenn Sie auf eine spätere Version abzielen, Ihre Mindestversion jedoch 1.5 ist, wird die Berechtigung nicht automatisch hinzugefügt.
Aktualisierung
- Interessant ist, dass es ein offenes Thema gibt (21504) ,
READ_PHONE_STATE
in das aufgeteilt werden muss, um a) eingehende Anrufe und verwandte (Telefonie) und eine zweite Erlaubnis für die Identifikationsdetails (IMEI, IMSI usw.) zu erkennen. Geöffnet 11/2011, noch nicht bearbeitet. Star es bei Interesse :)
- Und ja, es gibt eine Möglichkeit, dasselbe zu erreichen (eingehende Anrufe zu erkennen), ohne die
READ_PHONE_STATE
Erlaubnis, wie zB von Arno Welzel ausgeführt . Da ein eingehender Anruf den Rufton auslösen würde, könnte dieses Ereignis mit verwendet werden onAudioFocusChange()
, für das keine besondere Berechtigung erforderlich ist. Wenn dies ausgelöst wird, könnte die App den CallState überprüfen (erneut, ohne besondere Berechtigung erforderlich), um festzustellen, ob eine vorhanden ist eingehender Anruf.