2015-08-18 7 views
65

Es ignoriert vollständig:Erlaubnis von manifest nicht in Android funktioniert 6

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

Also habe ich Ausnahme:

Verursacht durch: android.view.WindowManager $ BadTokenException: Kann Fenster hinzufügen [email protected] - Erlaubnis für diesen Fenstertyp verweigert

ist es nicht einmal aufgelistet:

enter image description here

Wie soll ich es beheben? Vielen Dank.

EDIT:

Es in Configure Apps aufgeführt ist/Advanced/Draw über andere App. Also schalte ich es an und jetzt funktioniert es gut, aber warum gibt es keinen Dialog, um nach Erlaubnis zu fragen, wenn ich meine App laufen lasse? Alle Einstellungen wurden von taubult ausgeschaltet und ich muss zu den Einstellungen gehen und es manuell einschalten?

+1

Ich habe dieses Problem auch. Ich habe auch versucht, die Berechtigung für SYSTEM_ALERT_WINDOW zu erhalten, indem ich 'Activity # requestPermissions()' aufruft, aber das funktioniert nicht. – Shigerello

+2

Ich habe hier einen Fehlerbericht erstellt: https://code.google.com/p/android-developer-preview/issues/detail?id=2971 –

+9

Übrigens ist die Erlaubnis unter Einstellungen -> Apps -> Gear aufgeführt Symbol in der oberen Leiste -> Zeichnen Sie über andere Apps (im Bereich Erweitert). Sehr, sehr versteckt! –

Antwort

125

Dank CommonsWare's blog post, habe ich eine Ahnung.

Angenommen, Ihr Code in Activity oder Fragment, überprüfen Sie die Overlay-Erlaubnis und eine Anforderung für sie machen, wenn nötig:

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); 
    } 
} 

Dann erneut überprüfen Sie die Erlaubnis für eine bessere 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

Danke! Es funktioniert, aber es zeigt nicht normal (klein) Dialog, es zeigt Vollbild-Dialog, wenn ich um Erlaubnis ersuche, können Sie hier sehen: http://imgur.com/eWf5DSC Ist das normal? –

+0

Nun ... ich bin mir nicht sicher. Wie CommonsWare in seinem Blogbeitrag erwähnt, gibt es wenig (oder keine) Dokumentation über Änderungen von SYSTEM_ALERT_WINDOW. Es kann einen einfacheren Ansatz geben, wie mit einem kleinen Dialog, der die Erlaubnis verlangt, aber gegenwärtig ist dieser Ansatz der einzige, den ich kenne. – Shigerello

+0

Ihre Lösung funktioniert für mich. Aber der normale Weg, der in den Android-Docs zur Verfügung gestellt wurde, hat nicht funktioniert (http://developer.android.com/training/permissions/requesting.html) – Noundla

Verwandte Themen