2015-08-18 21 views
65

ignora completamente:permesso dal manifesto non funziona in Android 6

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

Così ho preso eccezione:

Causato da: android.view.WindowManager $ BadTokenException: Impossibile aggiungere la finestra [email protected] - permesso negato per questa finestra tipo

non è nemmeno elencato:

enter image description here

Come devo risolvere il problema? Grazie.

EDIT:

E 'classificato in Configurare apps/Avanzate/disegnare su altra applicazione. Quindi lo accendo e ora funziona bene, ma perché non c'è alcuna finestra di dialogo per chiedere il permesso quando eseguo la mia app? Tutte le autorizzazioni sono state disattivate da Deafult e ho bisogno di andare alle impostazioni e manualmente accenderlo?

+1

Ho anche questo problema. Ho anche provato ad ottenere il permesso per SYSTEM_ALERT_WINDOW chiamando 'Activity # requestPermissions()', ma questo non funziona. – Shigerello

+2

Qui ho segnalato un bug report: https://code.google.com/p/android-developer-preview/issues/detail?id=2971 –

+9

A proposito, l'autorizzazione è elencata in Impostazioni -> App -> Gear icona nella barra in alto -> Disegna su altre app (nella sezione Avanzate). Molto, molto nascosto! –

risposta

125

Grazie a CommonsWare's blog post, ho qualche idea.

Assumendo che il codice è in Activity o Fragment, controllare il permesso di sovrapposizione e fare una richiesta di esso, se necessario:

public static int OVERLAY_PERMISSION_REQ_CODE = 1234; 

public void someMethod() { 
    if (!Settings.canDrawOverlays(this)) { 
     Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
       Uri.parse("package:" + getPackageName())); 
     startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE); 
    } 
} 

Poi, ri-verificare il permesso per una migliore UX:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == OVERLAY_PERMISSION_REQ_CODE) { 
     if (!Settings.canDrawOverlays(this)) { 
      // SYSTEM_ALERT_WINDOW permission not granted... 
     } 
    } 
} 
+0

Grazie! Funziona, ma non mostra la normale (piccola) finestra di dialogo, mostra la finestra di dialogo a schermo intero quando richiedo l'autorizzazione, puoi vedere qui: http://imgur.com/eWf5DSC È normale? –

+0

Beh ... non ne sono sicuro. Come CommonsWare menziona nel suo post sul blog, c'è poca (o nessuna) documentazione sulle modifiche a SYSTEM_ALERT_WINDOW. Ci può essere un approccio più semplice, come con un piccolo dialogo che chiede il permesso, ma al momento questo approccio è l'unico che conosco. – Shigerello

+0

La tua soluzione funziona per me. Ma il modo normale che viene fornito nei documenti di Android non ha funzionato (http://developer.android.com/training/permissions/requesting.html) – Noundla

Problemi correlati