问题描述:
h5页面里面有个select标签,安卓app里的webview里面点击的时候默认会拉起一个原生的框,但是在笔者的app上,怎么点都没反应,控制台也没日志,也不报错,经过一段时间的的排查,通过手机上的日志捕捉。最终定位到了一个致命的异常。
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@427b7270 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:653)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
at android.view.Window$LocalWindowManager.addView(Window.java:558)
at android.app.Dialog.show(Dialog.java:316)
上面的日志的意思是承载Dialog的activity已经被销毁了,不存在了。也或者说压根就没有这个activity这个载体。好吧问题定位到了,我们去解决
1.权限问题
我们而已先从权限排查。
下面两个权限是必须的。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
2.检查webView初始化的时候,是用哪个Content初始化的。
笔者这里初始化的时候,是在Application里初始化的,传入的是,Application的content,所以。贴图
在初始化WebView的时候在Activiti上初始化,并且要保证这个webview所初始化的Activity是在存活状态,否者,就会弹不出,说白了,干嘛这么麻烦,直接弹个div出来就好了。