SYSTEM_ALERT_WINDOW - 如何在Android 6.0

SYSTEM_ALERT_WINDOW - 如何在Android 6.0和targetSdkVersion 23上自动获得此权限

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

谢谢


人到中年有点甜
浏览 1095回答 3
3回答

桃花长相依

在棉花糖来之后,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;

慕妹3146593

如果应用程序的目标是API 22或更低版本,则Play Store会在用户点击安装(显示警报)时提供SYSTEM_ALERT_WINDOW权限,即使其设备是Android 6.0,否则,如果应用程序的目标是API 23或更高版本,那么许可将被要求在运行时授予。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android