Android webview 响应html的选择图片逻辑(不是js调用)

首先我这边有了一个需求,就是html页面有一个按钮点击之后需要我选择图片,然后去返回给html。当时我就想直接js调用,然后返回就好啦,可是人家需求是所有页面的调用Android 选择图片的都需要加,不仅仅是我们这页面,那么问题来了,我之前没有弄过这个,网上找了找,大致就是不好找,而且也不太统一,我自己整理下,亲测可用的,不为别的,就是我后续查看比较清楚把。

 

首先:WebView的setWebChromeClient的监听中复写onShowFileChooser,如图:

  WebChromeClient webChromeClient = new WebChromeClient() {

        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
            mFilePathCallback = filePathCallback;
            selectImage();
            return true;
        }
    };
一定要将这个ValueCallback<Uri[]> 的对象保存下来,因为后面会用到。

集成图片选择器:

    compile 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
然后配置选择图片的一些参数并启动图片选择器:
   public static final int IMAGE_REQUESTION_CODE = 456;
    public void selectImage(Activity activity,int num){
        if(num > 1) {
            PictureSelector.create(activity)
                    .openGallery(PictureMimeType.ofImage())
                    .theme(R.style.picture_default_style)
                    .maxSelectNum(num)
                    .minSelectNum(1)
                    .imageSpanCount(3)// 每行显示个数
                    .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选
                    .previewImage(true)// 是否可预览图片
                    .isCamera(true)// 是否显示拍照按钮
                    .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
//                        .enableCrop(true)// 是否裁剪
//                        .compress(true)// 是否压缩
                    .synOrAsy(true)//同步true或异步false 压缩 默认同步
                    .forResult(IMAGE_REQUESTION_CODE);//结果回调onActivityResult code
        }else if(num == 1){
            PictureSelector.create(activity)
                    .openGallery(PictureMimeType.ofImage())
                    .theme(R.style.picture_default_style)
                    .maxSelectNum(1)
                    .minSelectNum(1)
                    .imageSpanCount(3)// 每行显示个数
                    .selectionMode(PictureConfig.SINGLE)// 多选 or 单选
                    .previewImage(true)// 是否可预览图片
                    .isCamera(true)// 是否显示拍照按钮
                    .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
//                        .enableCrop(true)// 是否裁剪
//                        .compress(true)// 是否压缩
                    .synOrAsy(true)//同步true或异步false 压缩 默认同步
                    .forResult(IMAGE_REQUESTION_CODE);//结果回调onActivityResult code
        }

然后在OnActivityResult()里面判断类型,然后将选择的图片数据整理成Uri[],然后返回给刚才上面获取的ValueCallback

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == RESULT_OK){
            if( requestCode == IMAGE_REQUESTION_CODE){
                List<LocalMedia> localMedia = PictureSelector.obtainMultipleResult(data);
                ArrayList<Uri> objects = new ArrayList<>();
                for (int i = 0; i < localMedia.size(); i++) {
                    objects.add(Uri.fromFile(new File(localMedia.get(i).getPath())));
                }
                if(mFilePathCallback != null && objects.size() != 0){
                    Uri[] uris = new Uri[objects.size()];
                    Uri[] uris1 = objects.toArray(uris);
                    mFilePathCallback.onReceiveValue(uris1);
                }
            }
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值