android system window,SYSTEM_ALERT_WINDOW - 如何在Android 6.0

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 6.0(API 级别 23)及以上版本中,应用程序需要在运行时请求权限,包括`android.permission.SYSTEM_ALERT_WINDOW`权限。下面是请求该权限的步骤: 1. 在 AndroidManifest.xml 文件中添加权限声明,如下所示: ``` <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> ``` 2. 在应用程序中检查该权限是否已经被授予。可以使用`checkSelfPermission()`方法来检查权限是否已经被授予,如下所示: ``` if (ContextCompat.checkSelfPermission(this, Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted } ``` 3. 如果权限未被授予,您可以使用`requestPermissions()`方法来请求权限。该方法将显示一个对话框,让用户选择是否授予权限。如果用户授予了权限,系统将调用应用程序的`onRequestPermissionsResult()`方法。如果用户拒绝了权限,应用程序必须处理这种情况。 ``` ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, MY_PERMISSIONS_REQUEST_SYSTEM_ALERT_WINDOW); ``` 在上面的代码中,`MY_PERMISSIONS_REQUEST_SYSTEM_ALERT_WINDOW`是应用程序定义的请求代码。它可以在`onRequestPermissionsResult()`方法中使用。 4. 处理权限请求结果。当用户选择是否授予权限时,系统将调用应用程序的`onRequestPermissionsResult()`方法。在该方法中,您可以检查用户是否授予了权限,并采取相应的措施。例如,如果用户授予了权限,您可以执行需要该权限的操作。如果用户拒绝了权限,您可以显示一个消息,告诉用户为什么需要该权限。以下是一个示例: ``` @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_SYSTEM_ALERT_WINDOW: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission granted } else { // Permission denied } return; } // Other cases... } } ``` 在上面的代码中,如果用户授予了权限,应用程序将执行需要该权限的操作。如果用户拒绝了权限,应用程序将显示一个消息,告诉用户为什么需要该权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值