最近有个h5页面上传图片的需求,适配起多版本来,真是麻烦呀
废话不多说,上代码
private ValueCallback<Uri> mUploadMessage;
/**
* 适配5.0系统
*/
private ValueCallback<Uri[]> mUploadMessage5;
private final static int FILECHOOSER_RESULTCODE = 1;
private class WebViewChromeClient extends WebChromeClient {
public void openFileChooser(ValueCallback<Uri> uploadFile) {
mUploadMessage = uploadFile;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(
Intent.createChooser(i, "File Chooser"),
FILECHOOSER_RESULTCODE);
}
public void openFileChooser(ValueCallback<Uri> uploadFile,
String acceptType) {
openFileChooser(uploadFile);
}
public void openFileChooser(ValueCallback<Uri> uploadFile,
String acceptType, String capture) {
openFileChooser(uploadFile);
}
//适配5.0系统
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
mUploadMessage5 = filePathCallback;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
return true;
}
}
然后再给webview设置上这个 webView.setWebChromeClient(new WebViewChromeClient());
继续
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("xingyun", "request" + requestCode +" result" + resultCode);
if (requestCode == FILECHOOSER_RESULTCODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
if (null == mUploadMessage5)
return;
if (resultCode == RESULT_CANCELED) {
if (mUploadMessage5 != null) {
mUploadMessage5.onReceiveValue(null);
mUploadMessage5 = null;
return;
}
}
}else {
if (null == mUploadMessage)
return;
if (resultCode == RESULT_CANCELED) {
if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
return;
}
}
}
if (data==null)
return;
Uri result = data == null || resultCode != RESULT_OK ? null : data
.getData();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mUploadMessage5.onReceiveValue(new Uri[]{result});
} else {
mUploadMessage.onReceiveValue(result);
}
// mUploadMessage.onReceiveValue(result);
// mUploadMessage = null;
}
}
完、