2017-09-13 1 views
3

Manifest:Settings.canDrawOverlays (contexte) retourne faux sur Android Oreo

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

code activity.onCreate():

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && BuildConfig.DEBUG) { 
     if (!Settings.canDrawOverlays(this)) { 
      Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
        Uri.parse("package:" + getPackageName())); 
      startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE); 
     } 
    } 

Problème: Settings.canDrawOverlays (ce) retourne false même donc la permission a déjà été accordée. N'a pas eu lieu avant la mise à jour de Pixel à Oreo.

version Android: 8.0.0

J'ai essayé de mettre à jour des outils de construction: à 26.0.1 et cible et compileSdk à 26. Il a aidé lors du premier lancement: après avoir désactivé sur elle retourne vrai, mais la prochaine fois que je lance une application, elle retourne à nouveau false.

+0

J'ai également rencontré ce problème - s'il vous plaît laissez-moi savoir si vous trouvez une solution – Eshaan

+1

Voir ma solution à la question à https://stackoverflow.com/questions/46173460/why-in-android-o-method- paramètres-candrawoverlays-retourne-faux-quand-utilisateur-a/48127195 # 48127195 – headuck

Répondre

0

J'ai donc rencontré ce problème et ma meilleure estimation est que maintenant dans Android O le paramètre pour canDrawOverlays est écrit de manière asynchrone. J'ai une activité qui démarre cet écran pour l'utilisateur et quand je reviens, je vois que cette méthode retourne false indépendamment du fait que l'utilisateur l'ait activée ou désactivée. Mais si je bascule sur le réglage et que j'attends un peu de temps pour revenir, cela semble refléter correctement. Je ne suis pas sûr de ce que google essayait d'accomplir avec ceci mais il fait le codage autour de savoir si le paramètre a été allumé ou pas très difficile maintenant.

Note: si vous commencez votre propre activité mettant en pause le Ensuite, l'autorisation de superposition est conservée et retournera True si elle est activée. C'est quelque chose que vous pouvez utiliser pour composer votre UX de contournement.

1

Le problème était dans Android Oreo lui-même. Après avoir installé le correctif de sécurité, il a disparu.

Solution: Installer le dernier correctif de sécurité.