安卓开发Android开发经验谈Web前端之路

android系统webview使用input实现选择图片并预览

2019-10-12  本文已影响0人  手指乐

一般系统的实现方式:

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>图片预览</title>
    <script src="https://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>

</head>

<body>
    <p>
        <img class="img" width="100" height="100" id="previewimg">
    </p>
    <input class="select" type="file" id="picfile">

    <script>
        $('.select').change(function(e) {
            var _URL = window.URL || window.webkitURL;
            $("#previewimg").attr("src", _URL.createObjectURL(this.files[0]))
        })
    </script>

</body>

</html>
opacity: 0;

android系统的实现

安卓webview系统无法通过input打开系统选择文件框,必须在原生里面拦截webview事件,选择完文件,处理相关逻辑(比如上传文件到oss)后回调到webview

wvmain.setWebChromeClient(new WebChromeClient(){

            //For Android  >= 5.0
            @Override
            public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {

                uploadMessageAboveL = filePathCallback;
                uploadPicture();
                return true;
            }


            //For Android  >= 4.1
            public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {
                uploadMessage = valueCallback;
                uploadPicture();
            }
        });
public void successImg(String img_url) {

                            if (img_url != null){
                                curPicUrl = img_url;
                                mHandle.sendEmptyMessage(UPLOAD_SUCESS);
                                if (uploadMessage != null) {
                                    uploadMessage.onReceiveValue(imageUri);
                                    uploadMessage = null;
                                }
                                if (uploadMessageAboveL != null) {
                                    uploadMessageAboveL.onReceiveValue(new Uri[]{imageUri});
                                    uploadMessageAboveL = null;
                                }
                            }else{
                                curPicUrl = "";
                                mHandle.sendEmptyMessage(UPLOAD_FAIL);
                                if (uploadMessage != null) {
                                    uploadMessage.onReceiveValue(null);
                                    uploadMessage = null;
                                }
                                if (uploadMessageAboveL != null) {
                                    uploadMessageAboveL.onReceiveValue(null);
                                    uploadMessageAboveL = null;

                                }
                            }
                        }
doChange() {
      var file = document.getElementById("fileInput");
      if(file.files.length == 0){//清除之前的图片
        document.getElementById("showpic" + i).style.display = "none";
        return;
      }else{
        //显示图片预览
}
      
    }
上一篇 下一篇

猜你喜欢

热点阅读