webview默认没有上传文件的处理,点击上传,咦!没反应,所以需要自己Diy
适配:Android API >= 21 (android 5.0) 以上机型
直接看代码,图我就不拍了,自己拿纸画吧。
1.html上传表单,随便你用什么控件框架,这里不例举了,
声明个全局变量var FILE_CHOOSER_RESULT_CODE=100
100,101,102……随便你任何感冒的数字。
2.webview对象,需要
webView.setWebChromeClient(
new JavaAdapter(WebChromeClient, {
onShowFileChooser: function (view, filePathCallback, fileChooserParams) {
uploadMessage = filePathCallback;
openImageChooserActivity();
return true;
},
})
);
3.用到的openImageChooserActivity(),打开你的相册
function openImageChooserActivity() {
let i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
ui.getActivity().startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
}
其中,image/*指定了图片类型,你也可根据mime需要自行更换,具体参照第二中的fileChooserParams参数,这不重要,不详述。
4.打开相册选好图片就得onActivityForResult响应事件了。
ui.onActivityEvent("onActivityResult", function (requestCode,resultCode,data) {
logd("onActivityResult"+requestCode);
if (requestCode != FILE_CHOOSER_RESULT_CODE) {
return false;
}
var uri = data.getData();
let uriArr = java.lang.reflect.Array.newInstance(java.lang.Class.forName("android.net.Uri"), 1);
uriArr[0] = uri;
uploadMessage.onReceiveValue(uriArr);
uploadMessage = null;
});
仅此而已,就这么简单。
参考: