ori*_*rel 73 android android-permissions target-sdk system-alert-window android-6.0-marshmallow
Facebook,Evernote,Pocket - 所有应用程序都会自动在Android 6.0上获得此权限,即使它们的目标是23(targetSdkVersion=23).
关于新的Marshmallow权限模型有很多文档.其中一个SYSTEM_ALERT_WINDOW被"提升"为"高于危险"的权限级别,因此需要特殊的用户干预才能授予应用程序这些权限.如果应用程序有targetSdkVersion22或更低,app会自动获得此权限(如果在清单中请求).
但是,我注意到一些获得此权限的应用程序,无需将用户发送到设置特殊页面的Draw over other apps权限.我看到Facebook,Evernote,Pocket - 也许还有更多.
任何人都知道在没有用户通过的情况下如何授予应用程序此权限Settings -> Apps -> Draw over other apps?
谢谢
Mat*_*ini 101
这是Marshmallow 6.0.1中引入的一种新行为.
每个请求SYSTEM_ALERT_WINDOW许可且通过Play商店安装的应用程序(需要6.0.5或更高版本)都将自动授予权限.
如果应用程序是侧载的,则不会自动授予该权限.您可以尝试从apkmirror.com下载并安装Evernote APK .如您所见,您需要手动授予权限Settings -> Apps -> Draw over other apps.
这些是提交[1] [2],允许Play商店自动授予SYSTEM_ALERT_WINDOW权限.
Jay*_*ani 58
在棉花糖来之后,Android让安全级别更加坚持,但是
SYSTEM_ALERT_WINDOW
Run Code Online (Sandbox Code Playgroud)
你可以显示浮动动作和任何你可以强制用户给它的权限通过你的onCreate()方法中的以下代码将此代码放在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);
}
Run Code Online (Sandbox Code Playgroud)
该操作ACTION_MANAGE_OVERLAY_PERMISSION直接启动"绘制其他应用程序"权限屏幕.
编辑:我的上面的代码工作100%正确
但我发现很多人仍然在寻找ACTION_MANAGE_OVERLAY_PERMISSION 永久性的允许方式如果用户已经允许Permission Once那么每次打开应用程序时都不要问它,所以请听你的解决方案 -
检查设备是否具有API 23+
如果23+ API然后检查用户是否有许可
如果有许可,一旦不驱使他Settings.ACTION_MANAGE_OVERLAY_PERMISSION,如果还没有许可,那么请求运行时权限检查
在你的onCreate()方法中放在下面.把它放在后面setContentView
checkPermission();
Run Code Online (Sandbox Code Playgroud)
现在把代码放在下面 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在最后是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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记在您的类中声明此公共变量
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;
Run Code Online (Sandbox Code Playgroud)
Kza*_*zaf 12
对于那些希望在从 Play 商店下载应用程序时自动获得此权限的人,除了 Manifest 中的 SYSTEM_ALERT_WINDOW 之外,您应该转到此链接并向 Google 请求此权限。
您必须提供一些额外信息,为什么需要此权限,Google 会审核并自动授予您权限。
请记住,在您提出要求之前,您必须:
在 Manifest 中拥有 SYSTEM_ALERT_WINDOW 权限
提示用户在您的应用程序中授予 SYSTEM_ALERT_WINDOW 权限(如果尚未授予)
如果我错过了什么,请随时更新答案
小智 7
现在(2019年)谷歌以Android Q中SYSTEM_ALERT_WINDOW的Bubbles形式提供了替代API ,谷歌决定最终SYSTEM_ALERT_WINDOW在未来的Android版本中弃用。
并且Android Go设备将不再授予此权限,
即Settings.canDrawOverlays() == false
| 归档时间: |
|
| 查看次数: |
60730 次 |
| 最近记录: |