Я разрабатываю собственное приложение Android, и мой бизнес должен работать с инструментом обратной связи, таким как веб-сайт Survey Monkey. У него есть возможность прикреплять / загружать файлы. Если я открою этот URL-адрес в браузере, используя context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(feedbackUrl)))
, пользователи смогут загружать файлы и оставлять отзывы. Но это открывает браузер за пределами приложения.
Итак, я визуализировал URL-адрес внутри веб-просмотра. Но при использовании веб-просмотра кнопки, которые должны открывать средство выбора файлов, не работали. Похоже, что никаких действий по этому поводу нет. Пытался установить дополнительные настройки для клиента веб-просмотра.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewModel.isProgress.set(true)
loadUrl()
}
private fun loadUrl() {
val webview = binding.webview
webview.webViewClient = RJBrowser()
webview.webChromeClient = RJChromeBrowser()
webview.settings.loadsImagesAutomatically = true
webview.settings.javaScriptEnabled = true
webview.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY
val settings = webview.settings
settings.setAppCacheEnabled(true)
settings.cacheMode = WebSettings.LOAD_DEFAULT
settings.useWideViewPort = true
settings.loadWithOverviewMode = true
settings.javaScriptCanOpenWindowsAutomatically = true
settings.mediaPlaybackRequiresUserGesture = false
// More optional settings, you can enable it by yourself
settings.domStorageEnabled = true
settings.setSupportMultipleWindows(true)
settings.loadWithOverviewMode = true
settings.allowContentAccess = true
settings.setGeolocationEnabled(true)
settings.allowUniversalAccessFromFileURLs = true
settings.allowFileAccess = true
// WebView settings
webview.fitsSystemWindows = true
webview.loadUrl(url)
}
inner class RJBrowser : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
view.loadUrl(url)
return true
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
viewModel.isProgress.set(false)
}
}
inner class RJChromeBrowser :WebChromeClient(){
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
}
override fun onShowFileChooser(
webView: WebView?,
filePathCallback: ValueCallback<Array<Uri>>?,
fileChooserParams: FileChooserParams?
): Boolean {
return super.onShowFileChooser(webView, filePathCallback, fileChooserParams)
}
}
Когда я поискал по inte rnet, я нашел пример обработки выбора / загрузки файлов на мобильной стороне. Скорее, я хочу, чтобы эти параметры были включены, чтобы веб-приложение Survey Monkey позаботилось обо всем остальном. Ищем предложения.