2015-06-08 12 views
19

Android M Preview docs ci mostra come verificare e richiedere autorizzazioni con il nuovo modello di autorizzazioni. Nel grafico sottostante che ci mostra un gruppo di gruppi di autorizzazioni e le relative autorizzazioni associate.Autorizzazioni di richiesta di Android M con permission_groups

Quando provo ad ad checkSelfPermission con un permission_group (cioè Manifest.permission_group.CAMERA) al primo avvio, prevedibilmente ottengo PackageManager.PERMISSION_DENIED.

Quindi provare a requestPermissions per quello stesso permission_group e non viene visualizzato alcun tipo di finestra di dialogo. 'onRequestPermissionsResult' restituisce immediatamente con -1.

Quando provo la stessa sequenza con Manifest.permission.Camera - le cose sembrano funzionare normalmente. Ma per una semplice app che sto facendo, ho bisogno di registrare video con audio, e la richiesta delle due autorizzazioni separate, CAMERA e (alias RECORD_AUDIO) sembra un design scadente.

La domanda: E 'checkSelfPermission e requestPermission suppone di lavorare con Manifest.permission.* e Manifest.permission_group.* ma c'è un bug che avrei dovuto presentare dal momento che non mostrerà richiesta? O era questo disegno intenzionale?

* Nota - Mi rendo conto che posso creare un array requestPermissions(String[], int) stringa con più autorizzazioni a me stesso, ma id hanno ancora un sacco di if dichiarazioni di controllare le combinazioni di permessi ho bisogno e di chiedere loro come un gruppo, quando ho dovrebbe solo bisogno di richiedere un permission_group

risposta

24

Quando provo ad ad checkSelfPermission con un permission_group (cioè Manifest.permission_group.CAMERA) al primo avvio, prevedibilmente ottengo PackageManager.PERMISSION_DENIED.

Questo perché checkSelfPermission() controlla le autorizzazioni, non i gruppi di autorizzazioni.

Quindi provare a requestPermissions per lo stesso permission_group e non viene visualizzato alcun tipo di finestra di dialogo. 'onRequestPermissionsResult' ritorna immediatamente con -1.

Questo perché requestPermissions() funziona con autorizzazioni, non con gruppi di autorizzazione.

È checkSelfPermission e requestPermission suppone di lavorare con Manifest.permission. *

Sì.

e Manifest.permission_group. *

No.

O era questo disegno intenzionale?

Presumibilmente sì.Almeno su checkSelfPermission(), si sovrappone agli altri metodi preesistenti che risalgono al livello 1 dell'API e funzionano sulle autorizzazioni, non sui gruppi di autorizzazioni.

Quando devo solo bisogno di richiedere un permission_group

Si stanno facendo ipotesi sul futuro di Android che potrebbe non essere accurata. Al momento, pre-M, i gruppi di autorizzazioni non sono particolarmente importanti e le autorizzazioni sono importanti. In M, i gruppi di permessi scalano di importanza, poiché questo è ciò che M utilizza nella sua presentazione agli utenti finali su ciò che l'utente può controllare. Tuttavia, le versioni successive di Android potrebbero offrire una granularità più fine su questo, sia per i singoli utenti che per le aziende tramite le policy, e probabilmente verrebbero ripristinate le autorizzazioni.

L'API suggerisce che Google sta lasciando la porta aperta per questo tipo di mosse. In effetti, il materiale del gruppo di autorizzazioni è una decisione UX, molto più di una tecnica.

+0

non era a conoscenza della stratificazione di checkSelf in cima ai vecchi metodi API, questo è bello sapere. potrei semplicemente provare a creare un'utilità di supporto che permetta alle persone di passare in permessi_gruppi e vedere se ha senso per me, e potenzialmente altri :) grazie per la risposta cw – trippedout

+0

ma poi, qual è l'uso noto di 'Manifest.permission_group. class'? –

+0

@HendraAnggrian: Ad esempio, è possibile utilizzarlo con ['getPermissionGroupInfo()' su 'PackageManager'] (https://developer.android.com/reference/android/content/pm/PackageManager.html#getPermissionGroupInfo (java. lang.String,% 20int)). – CommonsWare