2009-11-17 13 views
68

La mia app Android non ha nulla a che fare con le telefonate, ma sto vedendo che quando installo una build di debug sul mio dispositivo di test richiede "Phone Calls: leggi lo stato del telefono e identità "permessi. (Non ne faccio menzione in AndroidManifest.xml).Autorizzazioni Android: Telefonate: leggi stato telefono e identità

Mi piacerebbe avere le autorizzazioni minime possibili e mi chiedevo se qualcuno sapeva come sbarazzarsi di questo? Ho commentato la parte in cui stavo registrando alcune cose da Build.MODEL, Build.VERSION.*, ecc. Ho anche commentato la parte in cui stavo rilevando l'orientamento orizzontale/verticale pensando che quello potesse essere lo "stato del telefono". Ma nessuno di questi sembrava rimuovere quel permesso richiesto.

Ho trovato questo bug report: http://code.google.com/p/android/issues/detail?id=4101 ma è contrassegnato come funzionante come previsto con una nota sulle autorizzazioni corrette dal mercato ma non altrimenti. Questa esperienza di altre persone? (Odio dover pubblicare sul mercato solo per verificarlo.) Altrimenti, qualcuno sa se esiste un'API che posso evitare di chiamare per fare in modo che la mia app non abbia bisogno di questa autorizzazione?

Grazie!

risposta

89

(Rispondendo alla mia domanda proprio nel caso in cui nessun altro corre in questo problema e cerca di esso.)

Scavando in giro per PackageParser.java nella sorgente di Android, ho scoperto che il sistema assegna automaticamente

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE 

a qualsiasi app che dichiara una versione targetSdk inferiore a 4 (ciambella). Ci deve essere un motivo di compatibilità per questo, forse le app che hanno come target le versioni precedenti potrebbero presumere che avessero queste autorizzazioni senza dichiararle esplicitamente. Quindi, se non si vuole queste autorizzazioni aggiunti alla vostra applicazione implicitamente, aggiungere una sezione come la seguente in AndroidManifest.xml

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

Questo è tutto.

Buon divertimento, -Mike

+0

Quindi in 1.5 e in precedenza si dice che queste autorizzazioni sono assegnate di default e non c'è ricorso per attenuarlo? – MattC

+0

Ecco come mi sembra. Altrimenti, non so perché sarebbero stati concessi in modo implicito. Suppongo che per un test, potremmo provare a eseguire un'applicazione 1.5 sull'emulatore/dispositivo 1.5, non impostando alcun permesso di utilizzo e vedendo se è possibile (ad es.) Scrivere sulla sdcard. (Funziona sull'emulatore/dispositivo 1.6 ma solo a causa delle autorizzazioni aggiunte implicitamente. Impostando targetSdkVersion su 4 si costringerà anche ad aggiungere l'autorizzazione-usi prima di scrivere sulla sdcard.) –

+1

Il mio 'android: minSdkVersion' è 14 ma 'READ_PHONE_STATE' è concesso in modo implicito. Sto usando Facebook SDK e GoogleMaps v2, è possibile che queste librerie siano responsabili della richiesta di autorizzazione implicita? – wkarl

25

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

WRITE_EXTERNAL_STORAGE: Consente a un'applicazione di scrivere storage esterno. Le applicazioni che utilizzano API Level 3 e inferiore saranno implicitamente concessi questa autorizzazione (e questo sarà visibile all'utente); Le applicazioni utilizzando l'API Livello 4 o superiore devono richiedere esplicitamente questa autorizzazione allo .

Ma questo è solo uno di questi. Per qualche motivo nel registro delle modifiche ufficiali mancano le informazioni su READ_PHONE_STATE. La storia completa è chiarita qui: http://blogs.zdnet.com/Burnette/?p=1369&page=3

Nuove autorizzazioni. 1.6 programmi devono richiedere esplicitamente il WRITE_EXTERNAL_STORAGE permesso di essere in grado di modificare il contenuto della scheda SD, e devono esplicitamente richiesta READ_PHONE_STATE il permesso di essere in grado di essere in grado di recuperare telefono informazioni di stato . Le app per le versioni precedenti a si riferiscono sempre a richieste implicite.

Quindi, come potete vedere, non c'è modo di pubblicare un app rivolge a 1.5 o precedente senza richiedere le autorizzazioni se installato su telefoni che eseguono 1.6 o superiore.

Problemi correlati