Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Handle文件选择器android Web视图_Android_Webview - Fatal编程技术网

Handle文件选择器android Web视图

Handle文件选择器android Web视图,android,webview,Android,Webview,我有个问题,伙计们。我有一个webView应用程序。应用程序中有一个按钮,用户可以从设备中选择文件并上传到api。一切都是通过网络处理的。问题是,在webView应用程序中,点击按钮时,什么都没有发生,但是,当我尝试使用chrome浏览器或浏览器应用程序时,效果很好 我需要做什么来确保它与chrome浏览器的工作方式相同?我不想以本机方式处理此功能,因为这是我在网上看到的唯一解决方案。我尝试过这样做,但它不会像中那样弹出那些文件选项 有没有更简单的方法来处理这个问题?试试这个: private

我有个问题,伙计们。我有一个
webView
应用程序。应用程序中有一个按钮,用户可以从设备中选择文件并上传到api。一切都是通过网络处理的。问题是,在
webView
应用程序中,点击按钮时,什么都没有发生,但是,当我尝试使用chrome浏览器或浏览器应用程序时,效果很好

我需要做什么来确保它与chrome浏览器的工作方式相同?我不想以本机方式处理此功能,因为这是我在网上看到的唯一解决方案。我尝试过这样做,但它不会像中那样弹出那些文件选项

有没有更简单的方法来处理这个问题?

试试这个:

private var filePathCallback: ValueCallback<Array<Uri>>? = null

override fun onCreate(savedInstanceState: Bundle?) {
        webView.webChromeClient = object: WebChromeClient() {
            override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean {
                startActivityForResult(fileChooserParams?.createIntent(), CHOOSE_FILE_REQUEST_CODE)
                this@MainActivity.filePathCallback = filePathCallback
                return true
            }
        }
    }

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            CHOOSE_FILE_REQUEST_CODE -> {
                if (resultCode == Activity.RESULT_OK) {
                    filePathCallback?.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data))
                    filePathCallback = null
                }
            }
        }
    }
private var filePathCallback:ValueCallback?=无效的
重写创建时的乐趣(savedInstanceState:Bundle?){
webView.webChromeClient=对象:webChromeClient(){
覆盖ShowFileChooser(webView:webView?、filePathCallback:ValueCallback?、FileChooseParams:FileChooseParams?):布尔值{
startActivityForResult(文件选择器参数?.createIntent(),选择文件\请求\代码)
this@MainActivity.filePathCallback=文件路径回调
返回真值
}
}
}
重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){
super.onActivityResult(请求代码、结果代码、数据)
何时(请求代码){
选择\u文件\u请求\u代码->{
if(resultCode==Activity.RESULT\u确定){
filePathCallback?.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(结果代码,数据))
filePathCallback=null
}
}
}
}

您必须将webview设置为

    // Other webview options
    webView.getSettings().setLoadWithOverviewMode(true);
    // Javascript inabled on webview  
    webView.getSettings().setJavaScriptEnabled(true); 
    //webView.getSettings().setUseWideViewPort(true);
     
    //Other webview settings
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setPluginState(PluginState.ON);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setSupportZoom(true); 
需要设置自定义的“WebViewClient”,请查看链接以了解更多详细信息。


让我知道它是否适用于您。

有没有办法让选项像在web浏览器上一样显示?这需要我在应用程序上以本机方式处理文件意图,这是一项艰巨的任务。在web上,我们已经处理了包括api在内的所有事情。它在手机上的chrome浏览器上运行良好。有没有一种方法可以使它在不手动处理的情况下与WebView的行为相同?这不会显示其他选项,如照相机?如果在web浏览器中打开HTML页面,则显示的是摄像头选项。无法直接从web视图打开相机。要打开摄像头,您必须编写一些本机代码,因为您正在与android的硬件层通信。因此,我认为,如果不使用本机编写代码,您就无法从webview访问它。这需要我在应用程序上以本机方式处理文件意图,这是一项艰巨的任务。在web上,我们已经处理了包括api在内的所有事情。它在手机上的chrome浏览器上运行良好。有没有一种方法可以让它在不手动处理的情况下以与WebView相同的方式运行?