2016-02-19 10 views
18

Sto lavorando a un'applicazione per dispositivi pre-Marshmallow. Il codice sorgente non è stato scritto da me e il progetto stesso è abbastanza grande. Attualmente sto facendo l'app per richiedere le autorizzazioni quando necessario.Android, trova tutti i posti nel codice per richiedere le autorizzazioni

La domanda è: come trovare tutti i posti nel codice in cui è necessario richiedere il permesso? Sto utilizzando Android Studio.

EDIT
Alcune persone suggeriscono di cambiare api a 23 e basta eseguire l'applicazione e vedere i luoghi dove essa si blocca. Il problema è che l'app non si blocca in ogni posto.

Ad esempio, l'esecuzione di questo codice senza un permesso sarà mandare in crash l'applicazione:

TelephonyManager manager = (TelephonyManager) context 
      .getSystemService(Context.TELEPHONY_SERVICE); 

Mentre questo uno appena restituisce un array vuoto, invece di schiantarsi.

final String[] SELF_PROJECTION = new String[]{ 
    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,}; 
Cursor cursor = context.getContentResolver() 
    .query(ContactsContract.Profile.CONTENT_URI, SELF_PROJECTION, null, null, null); 

Inoltre, Android Lint non mostra questi luoghi. Non sono sicuro che dovrebbe essere.

+1

Impossibile rispondere in modo astratto. Devi richiedere le autorizzazioni dalla tua interfaccia utente.Pertanto, è necessario determinare in quale punto della app si stanno utilizzando le API protette, quindi determinare se si tratta di un'autorizzazione da richiedere in anticipo (ad esempio, al primo avvio della propria app) o solo quando l'utente preme su un'interfaccia utente elemento (ad esempio, elemento della barra delle azioni) che richiede di utilizzare il codice che richiede le API protette. – CommonsWare

+1

@CommonsWare, sto chiedendo un modo semplice per determinare quelle posizioni quando non si ha familiarità con il progetto. So cosa fare dopo. – geNia

+2

Magari tu compili contro sdk 23. puoi eseguire l'ispezione in Android Studio. – blay

risposta

4

Secondo la pagina degli sviluppatori per quanto riguarda security permissions:

In quasi tutti i casi, tuttavia, saranno stampate un fallimento il permesso al registro di sistema.

Quindi eseguire l'app e cercare nel registro "autorizzazioni" o simili.

Utilizzare il test dell'unità per garantire la copertura di tutti i punti del codice in cui possono essere richieste le autorizzazioni.

+1

Sebbene nessuna delle risposte mi abbia aiutato completamente, questa era la migliore. – geNia

1

Sicuro, compilare l'API 23, non aggiungere il codice di autorizzazione, eseguire l'app e vedere dove si blocca.

Dopo aver individuato le posizioni, è possibile attivare le autorizzazioni (tramite le impostazioni dell'app) in modo da poter superare quella schermata e quindi disattivarle in modo da poter vedere se si blocca.

Logcat è abbastanza descrittivo permette di sapere che i permessi sono negati ...

+0

Sì, ho dimenticato di dire che l'ho già provato. Vedi la mia modifica. – geNia

+0

Yah, vedo che hai scritto "Il problema è che l'app non si blocca in ogni posto." Ma se guardi a logcat vedrai quando un permesso viene negato. Suggerirei di filtrare in base ai log degli errori e di osservarli mentre giocavo con l'app – Shmuel

+0

Btw, ho dovuto farlo anche su un progetto. Ed è così che l'ho risolto – Shmuel

0

È possibile eseguire questa operazione: eliminare le autorizzazioni pericolose dal manifest. In questo modo, puoi testare praticamente su qualsiasi dispositivo, sarai sicuro che si bloccherà e troverai i punti esatti in cui hai bisogno di tali permessi. Questo è come l'ho fatto lo stesso.

2

Aggiungi

lintOptions { 
    enable 'MissingPermission' 
} 

nel vostro build.gradle. Questo mostrerà avvertimenti dopo aver creato la tua applicazione.

+0

Questo mostra effettivamente tutte le autorizzazioni mancanti? Non ha fatto nulla per me. –

-4

Richiedi tutte le autorizzazioni desiderate al primo avvio della tua app.

Non è un Best Practices, ma si tratta di una risposta di questa domanda.

+3

Non sovraccaricare l'utente Se l'utente esegue Android 6.0 (livello API 23) o successivo, l'utente deve concedere all'app le sue autorizzazioni mentre eseguono l'app. Se affronti l'utente con un sacco di richieste di permessi in una sola volta, potresti sopraffare l'utente e farli chiudere la tua app. Invece, dovresti chiedere i permessi quando ne hai bisogno. [Link] (http://developer.android.com/intl/es/training/permissions/best-practices.html) –

Problemi correlati