webview解决上传文件的问题

来源:互联网 发布:ppt数据分析图表模板 编辑:程序博客网 时间:2024/06/05 18:03

webview解决上传文件的问题

用webview打开一些网页是可能会遇到需要上传文件的情况
解决办法重写WebChromeClient:
解决办法如下:

webView.setWebChromeClient(new WebChromeClient() {            //            public void onProgressChanged(WebView view, int progress) {                startProgressDialog();                if (progress == 100) {                    stopProgressDialog();                }            }            // For Android 3.0+            public void openFileChooser(ValueCallback<Uri> uploadMsg) {                mUploadMessage = uploadMsg;                Intent i = new Intent(Intent.ACTION_GET_CONTENT);                i.addCategory(Intent.CATEGORY_OPENABLE);                i.setType("*/*");                MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);            }            // For Android 3.0+            public void openFileChooser( ValueCallback uploadMsg, String acceptType ) {                mUploadMessage = uploadMsg;                Intent i = new Intent(Intent.ACTION_GET_CONTENT);                i.addCategory(Intent.CATEGORY_OPENABLE);                i.setType("*/*");                MainActivity.this.startActivityForResult(                        Intent.createChooser(i, "File Browser"),                        FILECHOOSER_RESULTCODE);            }            //For Android 4.1            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){                mUploadMessage = uploadMsg;                Intent i = new Intent(Intent.ACTION_GET_CONTENT);                i.addCategory(Intent.CATEGORY_OPENABLE);                i.setType("*/*");                MainActivity.this.startActivityForResult( Intent.createChooser( i, "File Browser" ), MainActivity.FILECHOOSER_RESULTCODE );            }            // For Android 5.0+            public boolean onShowFileChooser (WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {                mUploadCallbackAboveL = filePathCallback;                Intent i = new Intent(Intent.ACTION_GET_CONTENT);                i.addCategory(Intent.CATEGORY_OPENABLE);                i.setType("*/*");                MainActivity.this.startActivityForResult(                        Intent.createChooser(i, "File Browser"),                        FILECHOOSER_RESULTCODE);                return true;            }        });  @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if(requestCode==FILECHOOSER_RESULTCODE)        {            if (null == mUploadMessage && null == mUploadCallbackAboveL) return;            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();            if (mUploadCallbackAboveL != null) {                onActivityResultAboveL(requestCode, resultCode, data);            }            else  if (mUploadMessage != null) {                mUploadMessage.onReceiveValue(result);                mUploadMessage = null;            }        }    }    @TargetApi(Build.VERSION_CODES.LOLLIPOP)    private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {        if (requestCode != FILECHOOSER_RESULTCODE                || mUploadCallbackAboveL == null) {            return;        }        Uri[] results = null;        if (resultCode == Activity.RESULT_OK) {            if (data == null) {            } else {                String dataString = data.getDataString();                ClipData clipData = data.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)};            }        }        mUploadCallbackAboveL.onReceiveValue(results);        mUploadCallbackAboveL = null;        return;    }

就可以了

0 0
原创粉丝点击