Android应用开发之错误问题解决
白羽 2018-12-19 来源 :网络 阅读 475 评论 0

摘要:本文将带你了解Android应用开发add window android.view.ViewRootImpl$W@fa525bc -- permission denied for window type 2003,希望本文对大家学Android有所帮助。

    本文将带你了解Android应用开发add window android.view.ViewRootImpl$W@fa525bc -- permission denied for window type 2003,希望本文对大家学Android有所帮助。

        

问题详情:android.view.WindowManager$BadTokenException
Unable to add window android.view.ViewRootImpl$W@fa525bc -- permission denied for window type 2003

先说下这个坑出现的原因吧,这个问题经测试只有在Android8.0才会出现,所以这个问题出现的原因是我们没有悬浮窗权限以及指定的WindowManager窗口类型有误。

这里要解释一下:Android 8.0我们要弹出一个Dialog时,不要设置

WindowManager.LayoutParams.Type为WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,?

而是要设置为:WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY

代码如下:


   

WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();

lp.width = (int) (display.getWidth() - width); //设置宽度

//窗口类型

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

 lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;

} else {

 lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

}

dialog.getWindow().setAttributes(lp);

dialog.show();

   

故:我们要在设置窗口类型的时候判断是否为8.0及以上系统,然后进行不同的设置。

注意:设置窗口类型一定要在Dialog调用show()方法之前。

此外,我们还需要在AndroidManifest.xml中添加权限:


   

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>

   

如果是Android 8.0系统,需要我们动态授权悬浮窗权限,代码如下:


@TargetApi(Build.VERSION_CODES.O)

protected boolean requestDrawOverLays() {

 if (!Settings.canDrawOverlays(mContext)) {

  showMsg("使用本应用需要您开启悬浮窗权限,请前往设置。");

  Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + mContext.getPackageName()));

  startActivityForResult(intent, Constant.OVERLAY_PERMISSION_REQ_CODE);

  return false;

 }

 return true;

}


   

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case Constant.OVERLAY_PERMISSION_REQ_CODE:

if (requestDrawOverLays()) {

//允许悬浮窗

}

break;

}

}

  


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程