BadTokenException 解决方案


极力推荐Android 开发大总结文章:欢迎收藏
Android 开发技术文章大总结


BadTokenException:
log 举例
03-12 14:55:13.734 5564 5564 E AndroidRuntime: FATAL EXCEPTION: main
03-12 14:55:13.734 5564 5564 E AndroidRuntime: Process: com.android.fmradio, PID: 5564
03-12 14:55:13.734 5564 5564 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.HEADSET_PLUG flg=0x40000010 (has extras) } in com.android.fmradio.FmService$FmServiceBroadcastReceiver@b3d2a03
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1401)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:873)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.os.Looper.loop(Looper.java:193)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6702)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@f652dba -- permission denied for window type 2003
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:851)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.app.Dialog.show(Dialog.java:329)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at com.android.fmradio.FmService$FmServiceBroadcastReceiver.onReceive(FmService.java:322)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1391)
03-12 14:55:13.734 5564 5564 E AndroidRuntime: ... 8 more
产生原因
Android 8.0 之后如果要弹出系统弹窗,需要使用 TYPE_APPLICATION_OVERLAY
以及<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
来进行系统弹窗,否则会报以下异常BadTokenException: Unable to add window android.view.ViewRootImpl$W@f652dba -- permission denied for window type 2003
解决方案
系统弹窗,请用TYPE_APPLICATION_OVERLAY 替换之前的Windows Type。
Dialog mFMDialog = new AlertDialog.Builder(context)
.setTitle(R.string.airplane_title).setMessage(R.string.airplane_message)
.setPositiveButton(R.string.close_FM,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}
).setCancelable(false).create();
// Android 8.0 之后弹出系统弹窗,需要使用 TYPE_APPLICATION_OVERLAY
// <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
// 一下两个 之前常用的系统的Dialog 会报
// BadTokenException: Unable to add window android.view.ViewRootImpl$W@f652dba -- permission denied for window type 2003
//mFMDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
//mFMDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mFMDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
mFMDialog.show();
参考 Google Android GO 行为变更
Google 官方链接如下:
Android 8.0 Alert 弹窗行为变更

Android 8.0 Alert 弹窗行为变更

小礼物走一走,来简书关注我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!