以前写的项目时,遇到过这样一个问题,在ios和微信都可以,就是android不行,尴尬的,无论你多使劲点都发现无法弹出安卓原生文件选择界面,简直要崩溃了最后通过一番资料查询,发现要重写WebChromeClient类里面的方法--
先说一下执行的步骤:
1.通过webview.setWebChromeClient(),传入一个WebChromeClient的实现类,在WebChromeClient实现类里面我们要重写里面的openFileChooser方法,这个方法会在文件准备上传时进行回调。
2.在openFileChooser这个方法里面我们设置Intent打开支持第三方文件的应用
3.然后在ActivityResult将第三方应用提供的内容通过ValueCallback的存储形式回传给webview。
一言不合直接贴代码..
- <span style="color:#ff6666;font-size:24px;"> </span><span style="font-size:18px;">public void openFileChooser(ValueCallback<Uri> uploadMsg) {
- Log.d(TAG, "openFileChoose(ValueCallback<Uri> uploadMsg)");
- mUploadMessage = uploadMsg;
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- i.setType("*/*");
- MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
- }
- public void openFileChooser( ValueCallback uploadMsg, String acceptType ) {
- Log.d(TAG, "openFileChoose( ValueCallback uploadMsg, String acceptType )");
- mUploadMessage = uploadMsg;
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- i.setType("*/*");
- MainActivity.this