华为Android 8.0以上悬浮窗权限正确开启方式

目前市面各种主流Android手机的悬浮窗权限总结代码

在这里插入图片描述

不想看继续看的,直接copy代码,拿走吧!

下面简单说一下,我在开发中遇到一个关于华为8.0手机悬浮窗的奇葩问题;

开发中在android 8.0上遇到了一个判断悬浮窗权限是否开启的问题,当在一个界面弹出dialog提示用户开启悬浮窗权限,用户点击之后,跳转到设置界面开启悬浮窗权限,然后返回该页面,Settings.canDrawOverlays(context) 进行权限开启的判断,结果返回的是false;程序接收到的是权限没有开启,但是到设置里面查看确实是开启了的。而且当你对界面有刷新操作之后(去到其他界面、退出重新进入、点击按钮等等),检测到权限也是开启的。但是当你从界面跳转到设置并开启权限,然后返回界面直接调用Settings.canDrawOverlays(context)方法判断显示的是未开启。
搞得我很头晕,网上找了一堆资料,都没有效果,最后无意间注释了一行代码,

 // intent.setData(Uri.parse("package:" + getPackageName()));

结果一切都恢复正常了,我艹了,8.0以上的手机就是坑呀!再次记录一下,希望对遇到我这样问题的人有帮助;

完整的代码如下:

    private void requestSettingCanDrawOverlays() {
        Toast.makeText(SplashActivity.this, "请打开显示悬浮窗开关!", Toast.LENGTH_LONG).show();
        int sdkInt = Build.VERSION.SDK_INT;
        if (sdkInt >= Build.VERSION_CODES.O) {//8.0以上
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
        } else if (sdkInt >= Build.VERSION_CODES.M) {//6.0-8.0
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
        } else {//4.4-6.0一下
            //无需处理了
        }
    }
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值