webview无法弹出select选择框

最近项目要接入一个H5页面,其中一个页面出现选择省市区的选择框,我怎么点怎么弹不出这个选择框。。后来在PC端浏览器中打开了该页面,并检查元素发现这是一个select标签,于是。。。

如果H5页面有一个select标签,android中的webview点击时会默认拉起一个原生的选择框,当我在6.0以上的机型点击时,会直接崩溃,查看了错误日志

1
2
3
4
5
6
7
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在show的时候必须要有一个activity作为窗口载体,上面的日志的意思是承载Dialog的activity已经被销毁了,所以会直接崩溃。

其实解决的办法也是很简单的

1.权限问题
1
2
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

上面这两个权限是必须的,上面两个权限不需要动态申请。

2.检查webview初始化的时候,是用哪个context上下文初始化的。(!!!!)

这点非常重要,因为需要的activity作为载体,所以必须要使用当前activity的context,而不能使用Application的context,之前我用的就是Application的context发现还是弹不出选择框,再仔细检查改正后才解决问题。