解决安卓webview不支持input type=file问题

来源:互联网 发布:unity3d室内漫游下载 编辑:程序博客网 时间:2024/05/20 16:36

1.重写setWebChrameClient

mWebView.setWebChromeClient(new WebChromeClient(){    // For 3.0+ Devices (Start)    protected void openFileChooser(ValueCallback uploadMsg, String acceptType)    {        Log.d(TAG, "openFileChooser: ");        mUploadMessage = uploadMsg;        Intent i = new Intent(Intent.ACTION_GET_CONTENT);        i.addCategory(Intent.CATEGORY_OPENABLE);        i.setType("image");        startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);    }    // For Lollipop 5.0+ Devices    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    public boolean onShowFileChooser(WebView mWebView,                                     ValueCallback<Uri[]> filePathCallback,                                     WebChromeClient.FileChooserParams fileChooserParams)    {        Log.d(TAG, "onShowFileChooser: ");        if (uploadMessage != null) {            uploadMessage.onReceiveValue(null);            uploadMessage = null;        }        uploadMessage = filePathCallback;        Intent intent = fileChooserParams.createIntent();        try        {            startActivityForResult(intent, REQUEST_SELECT_FILE);        } catch (ActivityNotFoundException e)        {            uploadMessage = null;            Toast.makeText(getBaseContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();            return false;        }        return true;    }    //For Android 4.1 only    protected void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)    {        mUploadMessage = uploadMsg;        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.addCategory(Intent.CATEGORY_OPENABLE);        intent.setType("image");        startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE);    }    //for Android <3.0    protected void openFileChooser(ValueCallback<Uri> uploadMsg)    {        mUploadMessage = uploadMsg;        Intent i = new Intent(Intent.ACTION_GET_CONTENT);        i.addCategory(Intent.CATEGORY_OPENABLE);        i.setType("image");        startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);    }});
重写onActivityResult在里面接收openfilechoose方法里面的图片等

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent intent){    Log.d(TAG, "onActivityResult: ");    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)    {        if (requestCode == REQUEST_SELECT_FILE)        {            if (uploadMessage == null)                return;            uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));            uploadMessage = null;        }    }    else if (requestCode == FILECHOOSER_RESULTCODE)    {        if (null == mUploadMessage)            return;        // Use MainActivity.RESULT_OK if you're implementing WebView inside Fragment        // Use RESULT_OK only if you're implementing WebView inside an Activity        Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();        mUploadMessage.onReceiveValue(result);        mUploadMessage = null;    }    else        Toast.makeText(getBaseContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show();}

阅读全文
0 0
原创粉丝点击