Android WebView 网页实现选择文件

来源:互联网 发布:中国电信网络重构原则 编辑:程序博客网 时间:2024/06/06 09:41

通常网页上都会有选择文件上传按钮 代码为 < input type=”file” />

要顺利的打开本地文件夹,就要重新写openFileChooser,然后再研究中发现openFileChooser是隐藏的一个方法,不能继承重写。

如下是解决方案:

1、

2、new 一个WebChromeClient,重新实现 openFileChooser方法

webView.setWebChromeClient(new WebChromeClient(){    public void openFileChooser(ValueCallback<Uri> filePathCallback)    {        mFilePathCallback4 = filePathCallback;        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.addCategory(Intent.CATEGORY_OPENABLE);        intent.setType("*/*");        startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);    }    public void openFileChooser(ValueCallback filePathCallback, String acceptType)    {        mFilePathCallback4 = filePathCallback;        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.addCategory(Intent.CATEGORY_OPENABLE);        intent.setType("*/*");        startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);    }    public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture)    {        mFilePathCallback4 = filePathCallback;        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.addCategory(Intent.CATEGORY_OPENABLE);        intent.setType("*/*");        startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);    }    @Override    public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)    {        mFilePathCallback5 = filePathCallback;        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.addCategory(Intent.CATEGORY_OPENABLE);        intent.setType("*/*");        startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);        return true;    }});

3、设置回调

private static final int REQUEST_FILE_PICKER = 1;private ValueCallback<Uri> mFilePathCallback4;private ValueCallback<Uri[]> mFilePathCallback5;@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent intent){    if(requestCode==REQUEST_FILE_PICKER)    {        if(mFilePathCallback4!=null)        {            Uri result = intent==null || resultCode!=Activity.RESULT_OK ? null : intent.getData();            if(result!=null)            {                String path = MediaUtility.getPath(getActivity(), result);                Uri uri = Uri.fromFile(new File(path));                mFilePathCallback4.onReceiveValue(uri);            }            else            {                mFilePathCallback4.onReceiveValue(null);            }        }        if(mFilePathCallback5!=null)        {            Uri result = intent==null || resultCode!=Activity.RESULT_OK ? null : intent.getData();            if(result!=null)            {                String path = MediaUtility.getPath(getActivity(), result);                Uri uri = Uri.fromFile(new File(path));                mFilePathCallback5.onReceiveValue(new Uri[]{ uri });            }            else            {                mFilePathCallback5.onReceiveValue(null);            }        }        mFilePathCallback4 = null;        mFilePathCallback5 = null;    }}
0 0
原创粉丝点击