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相同的方式运行?