web-dev-qa-db-fra.com

La permission du manifeste ne fonctionne pas dans Android 6

Il ignore complètement:

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

Donc j'ai eu une exception:

Causée par: Android.view.WindowManager $ BadTokenException: impossible d'ajouter une fenêtre Android.view.ViewRootImpl$W@86fb55b - autorisation refusée pour ce type de fenêtre

Ce n'est même pas répertorié:

enter image description here

Comment dois-je le réparer? Merci.

MODIFIER:

Il est répertorié dans Configurer les applications/Avancé/Dessiner sur une autre application. Donc, je l'allume et maintenant ça fonctionne bien, mais pourquoi n'y a-t-il pas de dialogue pour demander la permission lorsque je lance mon application? Toutes les permissions ont été désactivées et je dois aller dans les paramètres et l’allumer manuellement?

67
Djordje Tankosic

Merci à blog de CommonsWare , j'ai un indice.

En supposant que votre code soit dans Activity ou Fragment, vérifiez l’autorisation de superposition et faites une demande si nécessaire:

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

Ensuite, vérifiez à nouveau l’autorisation pour une meilleure 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...
        }
    }
}
127
Shigerello