是的,棉花糖问世后,Android使安全级别更加稳定,但是对于
SYSTEM_ALERT_WINDOW
您可以显示浮动操作以及任何内容,您可以通过在您的onCreate()
方法中遵循以下代码来强制用户授予其权限:将此代码放在setContentView之后
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
该操作将ACTION_MANAGE_OVERLAY_PERMISSION
直接启动“在其他应用程序上绘制”权限屏幕。
编辑:我的上述代码工作100%正确
但我只是发现,许多人仍在搜索如何ACTION_MANAGE_OVERLAY_PERMISSION
永久允许,例如如果用户具有允许权限,那么就不要在每次打开应用程序时都询问它,因此请听取您的解决方案-
检查设备是否具有API 23+
如果API超过23,则检查用户是否获得许可
如果曾经获得许可,不要开车去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)) {
checkPermission();
} else {
}
}
}
现在最后是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;