Android webview上传图片

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;
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值