首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android.view.WindowManager$BadTokenException:无法添加window android.view.ViewRootImpl$W@c745883 -权限被拒绝

android.view.WindowManager$BadTokenException是Android开发中的一个异常,表示无法添加窗口。android.view.ViewRootImpl$W@c745883是窗口的标识符。

这个异常通常是由于权限被拒绝引起的。在Android开发中,应用需要获取一些特定权限才能执行某些操作,例如访问网络、读取设备状态等。如果应用没有获得相应的权限,就会出现权限被拒绝的错误。

要解决这个问题,可以按照以下步骤进行操作:

  1. 检查应用的AndroidManifest.xml文件,确保已经声明了需要的权限。例如,如果应用需要访问网络,需要添加以下权限声明:
代码语言:txt
复制
<uses-permission android:name="android.permission.INTERNET" />
  1. 在运行时,可以使用动态权限请求来获取权限。可以使用Android的权限管理框架来请求权限,例如使用requestPermissions()方法。在获取权限的回调方法中,可以处理权限被授予或拒绝的情况。
  2. 如果应用需要在后台执行某些操作,可能需要申请后台运行权限。在Android 10及以上版本中,需要使用<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />权限声明,并且需要在代码中启动前台服务。
  3. 如果应用需要在系统弹出窗口上显示内容,需要申请SYSTEM_ALERT_WINDOW权限。可以使用以下权限声明:
代码语言:txt
复制
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  1. 如果应用需要访问设备的其他敏感信息,例如位置信息、联系人等,需要申请相应的权限,并在代码中处理权限请求结果。

腾讯云提供了一系列云服务和产品,可以帮助开发者构建和部署Android应用。其中,腾讯云移动开发套件(Mobile Development Kit,MDK)提供了一站式的移动开发解决方案,包括移动应用开发、测试、部署等环节。您可以通过腾讯云官网了解更多关于MDK的信息:腾讯云移动开发套件(MDK)

请注意,以上答案仅供参考,具体解决方法可能因具体情况而异。在实际开发中,建议参考官方文档和相关资源,以获得更准确和全面的解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

悬浮窗开发设计实践

添加View的流程步骤分析WindowManager.addView添加窗口之前,TextView的onDraw不会被调用,也就说View必须添加到窗口中,才会被绘制。...同时要注意,部分手机判断悬浮窗权限Api可能失效……将view添加到悬浮窗上利用addView将View添加window上,同样的,WindowManager.LayoutParams.type可以设置...而Android 8.0对系统和API行为做了修改,包括使用SYSTEM_ALERT_WINDOW权限的应用无法再使用一下窗口类型来在其他应用和窗口上方显示提醒窗口:如果需要实现在其他应用和窗口上方显示提醒窗口...如果在Android 8.0以上版本仍然使用TYPE_PHONE类型的悬浮窗口,则会出现如下异常信息:android.view.WindowManager$BadTokenException: Unable...to add window android.view.ViewRootImpl$W@f8ec928 -- permission denied for window type 200205.方案基础设计

2.3K40

Toast问题深度剖析(一)

异常和偶尔不显示的问题 当你在程序中调用了 Toast 的 API,你可能会在后台看到类似这样的 Toast 执行异常: android.view.WindowManager$BadTokenException...WindowManagerImpl.java:94) android.widget.Toast$TN.handleShow(Toast.java:459) 另外,在某些系统上,你没有看到什么异常,却会出现 Toast 无法正常展示的问题...而这个窗口对象,记录在了我们的 WindowManagerService(后面简称 WMS) 核心服务中。WMS 是专门用来管理应用窗口的核心服务。...实际上,这个所需要的这个系统窗口 token ,是由我们的 NotificationManager 系统服务所生成,由于系统服务具有高权限,当然不会有权限问题。...当进程异常退出后我们截取他们的日志可以得到: 12-28 11:10:30.086 24599 24599 E AndroidRuntime: android.view.WindowManager$BadTokenException

5.9K182

Android中WindowManager与WMS的解析

没有吧,那么View总该知道吧(不知道别说你是做android的) 其实说白了悬浮窗就是一个包裹的view。...我们接着看一下WMS的addWindow方法: 这个addWindow方法又是一段超长的代码,所以也就不全粘,说一下他的简单流程吧,主要是分为三步:权限判断、条件筛选、添加窗口 WMS的addWindow...,要么允许对应权限,要么就是拥有全部权限,否则就会返回DENIED。...在条件筛选完成之后,剩下的类型都是符合添加的类型,从现在开始就开始对不同的type进行不同的添加。经过多到加工后,将OKAY返回。 如果能从添加窗口的步骤返回,就说明一定是OKAY的。...因为ERROR类型是弃用的,我发现使用ERROR会抛出异常,而OVERLAY不会。

1.1K30

Android 悬浮窗权限各机型各系统适配大全(总结)

Manifest 中静态申请<uses-permission android:name="android.permission.SYSTEM_ALERT_<em>WINDOW</em>" / 权限,然后在使用时先判断该权限是否已经授权...TYPE_TOAST 是无法接收触摸事件的,但是幸运的是除了 miui 之外,这些版本可以直接在 Manifest 文件中声明 android.permission.SYSTEM_ALERT_WINDOW...不过由于这样可以不申请权限就弹出悬浮窗,而且在最新的 6.0+ 系统上也没有修复,所以如果这个漏洞滥用,就会造成一些意想不到的后果,因此我个人倾向于使用 QQ 的适配方案,也就是上面的正常适配流程去处理这个权限...: main android.view.WindowManager$BadTokenException: Unable to add window -- window android.view.ViewRootImpl...我们于是定位到了关键 7.1.1 上面不能重复添加 type_toast 类型 window 的原因!! 另外还有一点需要注意的是,在 7.1.1 上面还增加了如下的代码:   ? ?

6.1K31

Android老司机被打脸!Dialog 对应的 Context 必须是 Activity吗?

如果在show之前没有指定Window的type为SYSTEM_WINDOW类型,一样会发生BadTokenException的,message是token null is not valid; is...肯定有关系啦,别忘了Dialog在show方法里是通过WindowManager来添加View的,而这个WindowManager对象就是从Context的getSystemService(WINDOW_SERVICE...还有一个原因是没有SYSTEM_ALERT_WINDOW权限(当然要加权限啦,DisplayArea.Tokens的子容器,级别比普通应用的Window高,也就是会显示在普通应用Window的前面,如果不加权限控制的话...,滥用还得了)。...在获得SYSTEM_ALERT_WINDOW权限并将Dialog的Window.type指定为SYSTEM_WINDOW之后能正常显示,是因为WMS会为SYSTEM_WINDOW类型的窗口专门创建一个WindowToken

3.7K00

Android | 理解 Window 和 WindowManager

系统 Window 2000 ~ 2999 需要声明权限才能创建的 Window例如 Toast 和 系统状态栏这些都是系统的 WindowWindow 无法单独存在,必须依赖父级 Window...FLAG_NOT_TOUCH_MODAL 将 Window 区域以外的单击事件传递给底层的 Window,当前 Window 内的单击事件自己处理,一般都要开启此事件,否则其他 Window 无法收到单击事件...在实际开发中无法直接访问 Window,对 Window 访问必须通过 WindowManager Window添加过程 Window添加需要通过 WindowManager 的 addView...注释3:由于 activity 实现了 window 的callback 接口,这里表示 activity 的布局文件已经添加到 decorView 的 mParentView 中了,于是通知 onContentChanged...$BadTokenException: Unable to add window -- token null is not valid; is your activity running?

76720

Android Hook技术详解

在WindowManager要添加这个Toast的时候会去校验这个token,如果token有效,则添加窗口,无效则报crash。...通常情况下是不会出现这个问题的,但是在某种情况下Android 进程某个 UI 线程的某个消息阻塞,导致toast.show()方法一直无法调用,这个的同时NotificationManager的超时检测结束...虽然没复现出来这个token is valid,但我在阅读Toast源代码后想到用另一种方式来复现这个BadTokenException: 先来看点击了按钮以后报的错误: 因为type=...=TYPE_TOAST的类型的toast不能重复添加,所以这样也会报一个BadTokenException,接下来我们就要通过这个demo,用hook的解决方案来解决这个异常。...然后我们就可以来找hook点了,这里Toast 里面有一个静态变量mTN,TN类中通过调用handleShow()方法来把toast添加window上,而handleShow()是怎么调用的呢?

3.3K60

子线程 真的不能更新UI ?

我们从一个异常说起: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created...那可以猜想到,button的确实是在子线程添加window中的,子线程确实可以直接访问,而主线程访问确实会抛出异常。看来可以解释这个错误的原因了。 下面就具体分析下。...通过window的相关知识,我们还知道,Activity也是一个windowwindow添加是在ActivityThread的handleResumeActivity()。...因为根据window的相关知识,知道Toast也是window,show的过程就是添加Window的过程。...其实没有,上面说了,因为Activity的window添加在首次onResume之后执行的的,那ViewRootImpl的创建也是在这之后,所以也就无法checkThread了。

1.2K10
领券