介绍一下文件选择的实现思路:
通过 WebView.setWebChromeClient()调用Intent.createChooser()来进行文件选择。
覆写 onActivityResult()对文件路径进行处理得到包含文件名的路径。
android侧缓存文件系统的虚拟路径,通过ValueCallback.OnReceiveValue(new Uri[])传递,js侧通过jsbridge获取缓存的虚拟路径
来进行文件的对象的获取。
这样一套下来,可以成功实现oss上传的文件选择,但是有一天突然发现一个情况。当input进入文件选择页面之后,为空返回,input会无法再次唤起系统文件选择。
经过分析,发现如果未选择任何文件对象,ValueCallback.OnReceiveValue()也是必须要调用的,不然与js侧input的关联无法得到更新,变成假死状态,下一次点击也无法触发android侧。面对未选择任何文件对象的情况,需要把null作为参数传递给它。对,这个函数接受null而且不会发生异常。