Android-Berechtigungen: Telefonanrufe: Telefonstatus und Identität lesen

70

Meine Android-App hat nichts mit Telefonanrufen zu tun, aber ich sehe, dass bei der Installation eines Debug-Builds auf meinem Testgerät die Berechtigung "Telefonanrufe: Telefonstatus und Identität lesen" erforderlich ist. (Ich erwähne dies nicht in AndroidManifest.xml).

Ich hätte gerne die minimal möglichen Berechtigungen und habe mich gefragt, ob jemand weiß, wie er das loswerden kann. Ich bemerkte den Teil aus , wo ich ein paar Sachen wurde Protokollierung Build.MODEL, Build.VERSION.*usw. , bemerken ich aus auch der Teil , wo ich die Landschaft / Porträt Orientierung Denken Erfassen , dass das könnte der „Telefonstatus“ sein. Aber keiner von beiden schien diese erforderliche Erlaubnis zu entfernen.

Ich habe diesen Fehlerbericht gefunden: http://code.google.com/p/android/issues/detail?id=4101, aber er ist als bestimmungsgemäß gekennzeichnet, mit einem Hinweis darauf, dass die Berechtigungen vom Markt korrekt sind, aber nicht anders. Ist das die Erfahrung anderer Leute? (Ich würde es hassen, auf dem Markt veröffentlichen zu müssen, um das zu testen.) Weiß sonst jemand, ob es eine API gibt, die ich nicht aufrufen kann, damit meine App diese Berechtigung nicht benötigt?

Vielen Dank!

Mike Kale
quelle

Antworten:

90

(Beantwortung meiner eigenen Frage, falls jemand anderes auf dieses Problem stößt und danach sucht.)

Beim Stöbern in PackageParser.java in der Android-Quelle habe ich herausgefunden, dass das System automatisch zuweist

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE

für jede App, die eine targetSdk-Version von weniger als 4 (Donut) deklariert. Es muss einen Kompatibilitätsgrund dafür geben. Möglicherweise können Apps, die auf ältere Versionen abzielen, davon ausgehen, dass sie über diese Berechtigungen verfügen, ohne sie explizit zu deklarieren. Wenn Sie nicht möchten, dass diese Berechtigungen implizit zu Ihrer App hinzugefügt werden, fügen Sie in AndroidManifest.xml einen Abschnitt wie den folgenden hinzu

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

Das ist alles.

Viel Spaß, -Mike

Mike Kale
quelle
In Version 1.5 und früher sagen Sie also, dass diese Berechtigungen standardmäßig zugewiesen sind und es keinen Grund gibt, dies zu mildern?
MattC
So sieht es für mich aus. Ansonsten weiß ich nicht, warum sie implizit so gewährt würden. Ich nehme an, für einen Test könnten wir versuchen, eine 1.5-App auf dem 1.5-Emulator / Gerät auszuführen, ohne Verwendungsberechtigung festzulegen und zu prüfen, ob es möglich ist, (z. B.) auf die SD-Karte zu schreiben. (Das funktioniert auf dem 1.6-Emulator / Gerät, aber nur aufgrund der implizit hinzugefügten Berechtigungen. Wenn Sie targetSdkVersion auf 4 setzen, müssen Sie auch die Verwendungsberechtigung hinzufügen, bevor Sie auf die SD-Karte schreiben.)
Mike Kale
1
Mein android:minSdkVersionist 14, READ_PHONE_STATEwird aber implizit gewährt. Ich verwende Facebook SDK und GoogleMaps v2. Ist es möglich, dass diese Bibliotheken für die implizite Berechtigungsanforderung verantwortlich sind?
wkarl
24

Android 1.6-Änderungsprotokoll: http://developer.android.com/sdk/android-1.6.html#api

WRITE_EXTERNAL_STORAGE : Ermöglicht einer Anwendung das Schreiben in einen externen Speicher. Anwendungen, die API Level 3 und niedriger verwenden, wird diese Berechtigung implizit erteilt (und dies ist für den Benutzer sichtbar) . Anwendungen, die API Level 4 oder höher verwenden, müssen diese Berechtigung explizit anfordern.

Aber das ist nur einer von ihnen. Aus irgendeinem Grund fehlen im offiziellen Änderungsprotokoll die Informationen zu READ_PHONE_STATE. Die ganze Geschichte wird hier geklärt: http://blogs.zdnet.com/Burnette/?p=1369&page=3

Neue Berechtigungen. 1.6-Programme müssen explizit die Berechtigung WRITE_EXTERNAL_STORAGE anfordern , um den Inhalt der SD-Karte ändern zu können, und sie müssen explizit die Berechtigung READ_PHONE_STATE anfordern , um Informationen zum Telefonstatus abrufen zu können. Apps, die auf frühere Versionen abzielen, fordern diese Berechtigungen immer implizit an.

Wie Sie sehen, gibt es keine Möglichkeit, eine App für 1.5 oder früher zu veröffentlichen, ohne diese Berechtigungen anzufordern, wenn sie auf Telefonen mit Version 1.6 oder höher installiert ist.

Mark B.
quelle