Android6.0系统悬浮窗权限的问题解决方法

转自:http://blog.csdn.net/tangmanong/article/details/53114758

Android的窗口体系中,WindowManager占有非常重要的地位,平时我们使用悬浮窗会遇到一些权限的问题。

当 Android工程在

targetSdkVersion 23

编译,Android6.0及其以上版本手机使用悬浮窗功能时候,会发生

Java.lang.RuntimeException: Unable to create service com.fb.tangyc.fbtools.service.FBService: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@123e0ab -- permission denied for this window type

的异常,导致程序崩溃。

当Android工程在

targetSdkVersion 22

编译,Android6.0及其以上版本手机使用悬浮窗功能会正常使用

其实原因很简单,大部分的Android6.0手机(尤其是三星,谷歌原生手机)

在大于等于23版本下编译,悬浮窗权限默认是关闭没有权限,然在小于23版本下编译悬浮窗权限是开启有权限的。

所以在大于23版本下编译时需要去检测悬浮窗权限,并且获取悬浮窗权限,下面我就罗列下怎么去检测悬浮窗权限并且获取悬浮窗权限


if(Build.VERSION.SDK_INT>=23)
{
if(Settings.canDrawOverlays(this))
{
//有悬浮窗权限开启服务绑定 绑定权限
          Intent intent = new Intent(MainActivity.this, FBService.class);
          startService(intent);

      }else{
//没有悬浮窗权限m,去开启悬浮窗权限
          try{
Intent intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
          }catch (Exception e)
{
e.printStackTrace();
          }


}
} else{
//默认有悬浮窗权限  但是 华为, 小米,oppo等手机会有自己的一套Android6.0以下  会有自己的一套悬浮窗权限管理 也需要做适配
   Intent intent = new Intent(MainActivity.this, FBService.class);
   startService(intent);
}

每次使用悬浮窗的时候都要去检测权限,因为悬浮窗权限是可以手动关闭的。

位置位于  (三星S6为例Android6.0.1版本)设置-- 应用程序--应用程序管理器 -- 更多 --可出现在顶部的应用程序 --- 选择你的APP -- 运行在其他应用的上层显示 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值