android webview在默认情况下是不支持网页中的文件上传功能的;
如果在网页中有<input type="file" />,在android webview中访问时也会出现浏览文件的按钮
但是点击按钮之后没有反应...
那么如何能够让android的webview能够响应,这个浏览按钮呢?
我们需要为webview设置WebChromeClient,在WebChromeClient的实现类中覆盖文件选择的方法:
01 | /***************** android中使用WebView来打开本机的文件选择器 *************************/ |
04 | public void openFileChooser(ValueCallback<Uri> uploadMsg, |
05 | String acceptType, String capture) { |
06 | mUploadMessage = uploadMsg; |
07 | Intent intent = new Intent(Intent.ACTION_GET_CONTENT); |
08 | intent.addCategory(Intent.CATEGORY_OPENABLE); |
09 | intent.setType( "image/*" ); |
10 | context.startActivityForResult( |
11 | Intent.createChooser(intent, "完成操作需要使用" ), |
12 | WebMainActivity.FILECHOOSER_RESULTCODE); |
17 | public void openFileChooser(ValueCallback<Uri> uploadMsg, |
19 | mUploadMessage = uploadMsg; |
20 | Intent intent = new Intent(Intent.ACTION_GET_CONTENT); |
21 | intent.addCategory(Intent.CATEGORY_OPENABLE); |
22 | intent.setType( "image/*" ); |
23 | context.startActivityForResult( |
24 | Intent.createChooser(intent, "完成操作需要使用" ), |
25 | WebMainActivity.FILECHOOSER_RESULTCODE); |
29 | public void openFileChooser(ValueCallback<Uri> uploadMsg) { |
30 | mUploadMessage = uploadMsg; |
31 | Intent intent = new Intent(Intent.ACTION_GET_CONTENT); |
32 | intent.addCategory(Intent.CATEGORY_OPENABLE); |
33 | intent.setType( "image/*" ); |
34 | context.startActivityForResult( |
35 | Intent.createChooser(intent, "完成操作需要使用" ), |
36 | WebMainActivity.FILECHOOSER_RESULTCODE); |
39 | /************** end ***************/ |
在设置WebChromeClient时,要传入一个ValueCallback<Uri> mUploadMessage,同时传入webview所在的Activity的对象;
在WebChromeClient的实现类中对应的文件选择事件响应的方法里,使用webview所在的activity对象开启一个android文件选择器,
使用startActivityForResult方法,在开启的文件选择activity结束后需要返回一个值;在webview所在的activity中通过覆盖Activity的onActivityResult方法,得到所需的结果,即选择文件的url
04 | protected void onActivityResult( int requestCode, int resultCode, |
06 | if (requestCode == FILECHOOSER_RESULTCODE) { |
07 | mUploadMessage = wcci.getmUploadMessage(); |
08 | if ( null == mUploadMessage) |
10 | Uri result = intent == null || resultCode != RESULT_OK ? null |
12 | mUploadMessage.onReceiveValue(result); |
13 | mUploadMessage = null ; |
完成上述操作后就成功的实现了android webview支持文件上传。。。