JS表单调用安卓原生图片选择

1、重写WebChromeClient中onShowFileChooser方法:

 webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
                mUploadCallbackAboveL = filePathCallback;
                if (Build.VERSION.SDK_INT >= 23) {
                    int permission = ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
                    Log.e(TAG, "permission: " + permission);
                    if (permission != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PREMISSION_WRITE);
                        return false;
                    } else {//有权限
                        getImage();
                        return true;
                    }
                } else {
                    getImage();
                    return true;
                }
            }
        });

2、用的是GitHub上的图片选择框架https://github.com/LuckSiege/PictureSelectorLight

public void getImage() {
        PictureSelector.create(this)
                .openGallery(PictureMimeType.ofImage())
                .selectionMode(PictureConfig.SINGLE)
                .maxSelectNum(1)
                .previewImage(false)
                .compress(true)
                .rotateEnabled(false)
                .forResult(PictureConfig.CHOOSE_REQUEST);

    }

3、选择完图片的处理

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.e(TAG, "data: " + data);
        if (requestCode == PREMISSION_WRITE) {
            int permission = ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
            Log.e(TAG, "permission: " + permission);
            if (permission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PREMISSION_WRITE);
            } else {//有权限
                getImage();
            }
        } else if (requestCode == PictureConfig.CHOOSE_REQUEST) {
            Log.e(TAG, "onActivityResult: resultCode:" + resultCode);
            if (resultCode == RESULT_OK) {
                List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
                Log.e(TAG, "onActivityResult:selectList.size():" + selectList.size());
                if (selectList.size() > 0) {
                    LocalMedia localMedia = selectList.get(0);
                    File file = new File(localMedia.getPath());
                    Uri uri;
                    if (Build.VERSION.SDK_INT >= 24) {
                        // 适配android7.0 ,不能直接访问原路径
                        // 需要对intent 授权
                        uri = FileProvider.getUriForFile(MainActivity.this, "com.cangyouchina.www.provider", file);
                    } else {
                        uri = Uri.fromFile(file);
                    }
                    mUploadCallbackAboveL.onReceiveValue(new Uri[]{uri});

                } else {
                    mUploadCallbackAboveL.onReceiveValue(new Uri[]{});
                }
            } else {
                mUploadCallbackAboveL.onReceiveValue(new Uri[]{});
            }

        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值