Facebook, Evernote, Pocket - all apps get this permission on Android 6.0 automatically, even though they are targeting 23 (targetSdkVersion=23
).
There has been a lot of documentation regarding the new Marshmallow permission model. One of them is SYSTEM_ALERT_WINDOW
been 'promoted' to 'above dangerous' permission class thus requiring a special user intervention in order for apps to be granted with those. If the app has targetSdkVersion
22 or lower, app gets this permission automatically (if requested in the manifest).
However, I've noticed some apps that get this permission, without needing to send the user to the setting special page of Draw over other apps
permission. I saw Facebook, Evernote, Pocket - and perhaps there are more.
Anyone knows how an app can be granted this permission without the user go through Settings -> Apps -> Draw over other apps
?
Thanks
It is a new behaviour introduced in Marshmallow 6.0.1.
Every app that requests the
SYSTEM_ALERT_WINDOW
permission and that is installed through the Play Store (version 6.0.5 or higher is required), will have granted the permission automatically.If instead the app is sideloaded, the permission is not automatically granted. You can try to download and install the Evernote APK from apkmirror.com. As you can see you need to manually grant the permission in
Settings -> Apps -> Draw over other apps
.These are the commits [1] [2] that allow the Play Store to give the automatic grant of the
SYSTEM_ALERT_WINDOW
permission.Yeh After Marshmallow come Android make security level more stick, But For
you can show floating action and anything You can Force user to give permission for it By Following Codes in your
onCreate()
method Put this code after setContentViewThe action
ACTION_MANAGE_OVERLAY_PERMISSION
directly launches the 'Draw over other apps' permission screen.Edit: My Above Code works 100% Correct
But I just found that many guys are still searching that how can allow
ACTION_MANAGE_OVERLAY_PERMISSION
permanently like If user has allow Permission Once then don't ask it every time he open application so hear solution for you-Check if device has API 23+
if 23+ API then check if user has permit or not
if had permit once don't drive him to
Settings.ACTION_MANAGE_OVERLAY_PERMISSION
and if has not permit yet then ask for runtime permission checkPut below line in your
onCreate()
method. Put this aftersetContentView
Now put below code in
onActivityResult
Now finally the checkPermission method code
And don't forget to declare this public variable in your class
If the app targets API 22 or lower, then Play Store will give the SYSTEM_ALERT_WINDOW permission and others when the user clicks to install (showing an alert) even if its device is Android 6.0 Otherwise, if the app targets API 23 or above, so that permission will be request to grant in run time.