美文网首页
android webview调起手机系统相册

android webview调起手机系统相册

作者: 我与android的爱恨纠葛 | 来源:发表于2019-10-12 11:21 被阅读0次

(首先h5页面方面,要把按钮的type设置为“file”)
1.需要授予的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2,实现openFileChooser()方法

    WebSettings settings = webview.getSettings();

    settings.setUseWideViewPort(true);

    settings.setLoadWithOverviewMode(true);

    settings.setJavaScriptEnabled(true);

    // 1.设置WebChromeClient,重写文件上传回调

    webview.setWebChromeClient(new WebChromeClient() {

        // For Android < 3.0

        public void openFileChooser(ValueCallback<Uri> valueCallback) {

            uploadMessage = valueCallback;

            openImageChooserActivity();

        }

        // For Android  >= 3.0

        public void openFileChooser(ValueCallback valueCallback, String acceptType) {

            uploadMessage = valueCallback;

            openImageChooserActivity();

        }

        //For Android  >= 4.1

        public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {

            uploadMessage = valueCallback;

            openImageChooserActivity();

        }

        // For Android >= 5.0

        @Override

        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {

            uploadMessageAboveL = filePathCallback;

            openImageChooserActivity();

            return true;

        }

    });

    //加载本地网页

    String targetUrl = "file:///android_asset/takePicture-upload/index.html";

    webview.loadUrl(targetUrl);

}

// 2.回调方法触发本地选择文件

private void openImageChooserActivity() {

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);

    i.addCategory(Intent.CATEGORY_OPENABLE);

  //        i.setType("image/*");//图片上传

  //        i.setType("file/*");//文件上传

      i.setType("*/*");//文件上传

    startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);

}

// 选择图片后处理

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == FILE_CHOOSER_RESULT_CODE) {

        if (null == uploadMessage && null == uploadMessageAboveL) return;

        Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();

        // Uri result = (((data == null) || (resultCode != RESULT_OK)) ? null : data.getData());

        if (uploadMessageAboveL != null) {

            onActivityResultAboveL(requestCode, resultCode, data);

        } else if (uploadMessage != null) {

            uploadMessage.onReceiveValue(result);

            uploadMessage = null;

        }

    } else {

        //这里uploadMessage跟uploadMessageAboveL在不同系统版本下分别持有了

        //WebView对象,在用户取消文件选择器的情况下,需给onReceiveValue传null返回值

        //否则WebView在未收到返回值的情况下,无法进行任何操作,文件选择器会失效

        if (uploadMessage != null) {

            uploadMessage.onReceiveValue(null);

            uploadMessage = null;

        } else if (uploadMessageAboveL != null) {

            uploadMessageAboveL.onReceiveValue(null);

            uploadMessageAboveL = null;

        }

    }

}

//  选择内容回调到Html页面

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {

    if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)

        return;

    Uri[] results = null;

    if (resultCode == Activity.RESULT_OK) {

        if (intent != null) {

            String dataString = intent.getDataString();

            ClipData clipData = intent.getClipData();

            if (clipData != null) {

                results = new Uri[clipData.getItemCount()];

                for (int i = 0; i < clipData.getItemCount(); i++) {

                    ClipData.Item item = clipData.getItemAt(i);

                    results[i] = item.getUri();

                }

            }

            if (dataString != null)

                results = new Uri[]{Uri.parse(dataString)};

        }

    }

    uploadMessageAboveL.onReceiveValue(results);

    uploadMessageAboveL = null;

}

相关文章

网友评论

      本文标题:android webview调起手机系统相册

      本文链接:https://www.haomeiwen.com/subject/ylcqmctx.html