Android webview上传图片
程序员文章站
2022-07-08 10:10:07
Webview加载h5页面,h5上传图片需求是点击h5页面中的按钮,可以调起原生的图片库或者相机,然后上传图片。ios天然适配不用做任何操作,Android必须自己写逻辑去适配h5。Android webview适配h51.重写WebchromeClient里面的两个方法 webView_common.setWebChromeClient(new WebChromeClient(){// 低版本的Android执行这个方法(Android < 5.0)...
Webview加载h5页面,h5上传图片
需求是点击h5页面中的按钮,可以调起原生的图片库或者相机,然后上传图片。ios天然适配不用做任何操作,Android必须自己写逻辑去适配h5。
Android webview适配h5
1.重写WebchromeClient里面的两个方法
webView_common.setWebChromeClient(new WebChromeClient(){
// 低版本的Android执行这个方法(Android < 5.0)
@Override
public void openFileChooser(ValueCallback<Uri> valueCallback, String s, String s1) {
super.openFileChooser(valueCallback, s, s1);
// 具体逻辑跟高版本的一样,此处省略了
}
// 高版本的Android执行这个方法(Android > 5.0)
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> valueCallback,
FileChooserParams fileChooserParams) {
if (mUploadHigh !=null){
mUploadHigh.onReceiveValue(null);
}
mUploadHigh = valueCallback;
// 打开相册(这里执行你自己的打开相册的逻辑)
WebViewCommonActivityPermissionsDispatcher.startPictureWithPermissionCheck(WebViewCommonActivity.this);
return true;
}
});
2.全局变量声明两个变量,一个高版本,一个低版本
ValueCallback mUploadLow; // 低版本
ValueCallback mUploadHigh; // 高版本
3.在onActivityResult方法里面得到选择后的图片,然后回传给h5, 稍微注意一下数据的格式
下面的代码只是一个例子,具体执行你自己的相册回调处理逻辑
只有下面这句,是回传给h5显示图片的
results = new Uri[]{Uri.fromFile(new File(picture))};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
Uri[] results = null;
// 图片、视频、音频选择结果回调
List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
// 例如 LocalMedia 里面返回三种path
// 1.media.getPath(); 为原图path
// 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true 注意:音视频除外
// 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true 注意:音视频除外
// 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
if (selectList.size() > 0) {
picture = selectList.get(0).getCompressPath();
// 重点注意一下这个Uri是要一个数组,因为走的高版本的方法onShowFileChooser
results = new Uri[]{Uri.fromFile(new File(picture))};
mUploadHigh.onReceiveValue(results);
mUploadHigh = null;
}
break;
}
}
else if(resultCode == RESULT_CANCELED){
// 重置,才能再次点击
mUploadHigh.onReceiveValue(null);
mUploadHigh = null;
}
}
本文地址:https://blog.csdn.net/u013467495/article/details/107157725