是的,Marshmallow 之后,Android 使安全级别更加稳定,但对于
SYSTEM_ALERT_WINDOW
您可以显示浮动操作和任何内容您可以强制用户授予权限通过在您的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);
}
该操作ACTION_MANAGE_OVERLAY_PERMISSION
直接启动“在其他应用程序上绘制”权限屏幕。
编辑:我上面的代码工作 100% 正确
但是我只是发现很多人仍在寻找如何ACTION_MANAGE_OVERLAY_PERMISSION
永久允许,例如如果用户已允许权限一次,那么不要在每次打开应用程序时都询问它,以便为您听听解决方案-
检查设备是否有 API 23+
如果 23+ API 然后检查用户是否有许可
如果有许可证,请不要开车去Settings.ACTION_MANAGE_OVERLAY_PERMISSION
,如果还没有许可证,则要求检查运行时权限
onCreate()
在您的方法中添加以下行。把这个放在后面setContentView
checkPermission();
现在将下面的代码放入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
}
}
}
现在终于 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);
}
}
}
不要忘记在你的类中声明这个公共变量
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;