Facebook, Evernote, Pocket - toutes les applications obtiennent cette autorisation automatiquement sur Android 6.0, même si elles ciblent 23 (targetSdkVersion=23
).
Il y a eu beaucoup de documentation concernant le nouveau modèle d'autorisation de Marshmallow. L'un d'eux est SYSTEM_ALERT_WINDOW
été 'promu' vers la classe d'autorisations 'supérieure à dangereuse', ce qui nécessite une intervention spéciale de l'utilisateur pour que les applications en bénéficient. Si l'application a targetSdkVersion
22 ou moins, l'application obtient cette autorisation automatiquement (si demandé dans le manifeste).
Cependant, j'ai remarqué que certaines applications obtiennent cette autorisation, sans avoir à envoyer l'utilisateur à la page de configuration spéciale de l'autorisation Draw over other apps
. J'ai vu Facebook, Evernote, Pocket - et il y en a peut-être d'autres.
Tout le monde sait comment une autorisation peut être accordée à une application sans que l'utilisateur ne passe par Settings -> Apps -> Draw over other apps
?
Merci
C'est un nouveau comportement introduit dans Marshmallow 6.0.1 .
Chaque application qui demande l'autorisation SYSTEM_ALERT_WINDOW
et qui est installée via le Play Store (la version 6.0.5 ou une version ultérieure est requise) devra: accordé la permission automatiquement.
Si, au lieu de cela, l'application est chargée latéralement, l'autorisation n'est pas automatiquement accordée. Vous pouvez essayer de télécharger et d’installer Evernote APK à partir de apkmirror.com . Comme vous pouvez le constater, vous devez accorder manuellement l’autorisation dans Settings -> Apps -> Draw over other apps
.
Ce sont les commits [1][2] qui permettent au Play Store d’accorder l’octroi automatique de l’autorisation SYSTEM_ALERT_WINDOW
.
Yeh After Marshmallow arrive Android améliore le niveau de sécurité, mais pour
SYSTEM_ALERT_WINDOW
vous pouvez afficher une action flottante et tout ce que vous voulez Vous pouvez obliger l'utilisateur à donner l'autorisation. En suivant les codes dans votre méthode onCreate()
Mettez ce code après setContentView
// Check if Android M or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Show alert dialog to the user saying a separate permission is needed
// Launch the settings activity if the user prefers
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
L'action ACTION_MANAGE_OVERLAY_PERMISSION
lance directement l'écran d'autorisation "Dessiner sur d'autres applications".
Edit: Mon code ci-dessus fonctionne à 100% correct
Mais je viens de trouver que beaucoup de gars sont toujours à la recherche de ce qui peut permettre ACTION_MANAGE_OVERLAY_PERMISSION
de façon permanente, comme si l'utilisateur autorisait Permission Once, alors ne le demandez pas à chaque fois qu'il ouvre l'application alors entendez la solution pour vous -
Vérifier si l'appareil a l'API 23+
si 23+ API puis vérifier si l'utilisateur a permis ou non
si une fois le permis obtenu ne le conduit pas à Settings.ACTION_MANAGE_OVERLAY_PERMISSION
et s'il ne l'a pas encore permis, demandez une vérification des autorisations d'exécution.
Mettez sous la ligne dans votre méthode onCreate()
. Mettez ceci après setContentView
checkPermission();
Maintenant, mettez le code ci-dessous dans onActivityResult
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
// You don't have permission
checkPermission();
} else {
// Do as per your logic
}
}
}
Maintenant enfin le code de la méthode checkPermission
public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
Et n'oubliez pas de déclarer cette variable publique dans votre classe
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;
Si l'application cible 22 ou moins l'API, Play Store donnera l'autorisation SYSTEM_ALERT_WINDOW et d'autres lorsque l'utilisateur clique pour installer (afficher une alerte) même si son appareil est Android 6.0. Sinon, si l'application cible l'API 23 ou supérieur, de sorte que l'autorisation sera demandée dans le temps d'exécution.
Maintenant (2019), Google propose une API alternative à SYSTEM_ALERT_WINDOW
sous la forme de Bubbles dans Android Q, Google a finalement décidé de deprecate SYSTEM_ALERT_WINDOW
dans une future version de Android.
Et Android Go appareils n'accordera plus cette autorisation i.e Settings.canDrawOverlays() == false