在棉花糖来之后,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 永久性的允许方式如果用户已经允许Permission Once那么每次打开应用程序时都不要问它,所以请听你的解决方案 -检查设备是否具有API 23+
如果23+ API然后检查用户是否有许可
如果有许可,一旦不驱使他Settings.ACTION_MANAGE_OVERLAY_PERMISSION,如果还没有许可,那么请求运行时权限检查
在你的onCreate()方法中放在下面。把它放在后面setContentViewcheckPermission();
现在把代码放在下面 onActivityResult@TargetApi(Build.VERSION_CODES.M)@Overrideprotected 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;