Kotlin-无法将URL加载到android Pie设备中的android Web视图中

问题描述 投票:0回答:2

这里,我需要将URL http://192.168.8.200:8000/surveys/SLTest01?auth=3hZE9Zf7a加载到android Web视图中。但是不幸的是,该页面无法在android 9(Pie)设备中加载,但是android 5.1.1(Lollipop)设备可以完美地加载该页面。在android pie设备上加载URL时出现“ android webkit资源”错误。

IntakeReadingsFragment.kt

 override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        binding.setLifecycleOwner(this)
        myWebSettings = binding.webView.getSettings()
        databasePath = activity!!.getDir("database", Context.MODE_PRIVATE).getPath()

        myWebSettings!!.setJavaScriptEnabled(true)
        myWebSettings!!.setDatabaseEnabled(true)
        myWebSettings!!.setDatabasePath(databasePath)
        myWebSettings!!.setLoadWithOverviewMode(true)
        myWebSettings!!.setUseWideViewPort(true)
        myWebSettings!!.setAppCacheEnabled(true)
        myWebSettings!!.setCacheMode(WebSettings.LOAD_NO_CACHE)
        myWebSettings!!.setDatabaseEnabled(true)
        myWebSettings!!.setDomStorageEnabled(true)
        myWebSettings!!.setGeolocationEnabled(false)
        myWebSettings!!.setSaveFormData(false)
        myWebSettings!!.setJavaScriptCanOpenWindowsAutomatically(true)

        binding.webView.setWebChromeClient(object : WebChromeClient() {
            private val TAG = "WebView"

            override fun onConsoleMessage(cm: ConsoleMessage): Boolean {
                Log.d(TAG, cm.sourceId() + ": Line " + cm.lineNumber() + " : " + cm.message())
                return true
            }

        })

        binding.completeButton.singleClick {
                showCompleteCOnfirmationDialog()
        }

        binding.cancelButton.singleClick {
            val cancelDialogFragment = CancelDialogFragment()
            cancelDialogFragment.arguments = bundleOf("participant" to participant)
            cancelDialogFragment.show(fragmentManager!!)
        }
        val intakeRequest = IntakeRequest("")

        intakeRequest.meta = participant!!.meta
        viewModel.setParticipant(intakeRequest, participant?.screeningId)

        binding.webView.addJavascriptInterface(JavascriptInterface(activity, viewModel, jobManager), "Android")

        viewModel.intakePostComplete?.observe(this, Observer { assertsResource ->
            if (assertsResource?.status == Status.SUCCESS) {
                println(assertsResource.data?.data)
                if (assertsResource.data != null) {

                    val intakeData = assertsResource.data.data
                    binding.webView.loadUrl(intakeData?.intake_url)
                    webUrl = intakeData!!.intake_url

                    Log.d("INTAKE_FRAGMENT", "URL: " + webUrl)

                }
            }
        })

        binding.webView.setWebViewClient(object : WebViewClient() {

            override fun onPageFinished(view: WebView?, url: String?) {
                super.onPageFinished(view, url)
                if(url != null) {
                    //binding.webView.loadUrl(webUrl)
                }

            }

            override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse?
            ) {
                super.onReceivedHttpError(view, request, errorResponse)
                Log.d("INTAKE_READING","HTTP_ERROR_REQUEST: " + request.toString() + " AND HTTP_ERROR_RESPONSE " + errorResponse.toString())
            }

            override fun onReceivedHttpAuthRequest(
                view: WebView?,
                handler: HttpAuthHandler?,
                host: String?,
                realm: String?
            ) {
                super.onReceivedHttpAuthRequest(view, handler, host, realm)
                Log.d("INTAKE_READING" , "HTTP_AUTH_REQUEST_ERROR: " + realm + ", " + host)
            }
        })

        viewModel.intakeUpdateComplete?.observe(this, Observer { assertsResource ->
            if (assertsResource?.status == Status.SUCCESS) {
                println(assertsResource.data?.data)
                if (assertsResource.data != null) {
                    val completedDialogFragment = CompletedDialogFragment()
                    completedDialogFragment.arguments = bundleOf("is_cancel" to false)
                    completedDialogFragment.show(fragmentManager!!)

                } else {
                    binding.completeButton.visibility = View.VISIBLE
                    toast(assertsResource.message.toString())
                    Crashlytics.logException(Exception("IntakeComplete " + assertsResource.message.toString()))
                    binding.executePendingBindings()
                }
            }
        })
}   


class JavascriptInterface(
        val mContext: FragmentActivity?,
        val viewModel: IntakeReadingsViewModel,
        val jobManager: JobManager
    ) {
        fun finish() {

        }

        fun showAndroidToast() {
            Toast.makeText(mContext, "ss", Toast.LENGTH_LONG).show();
        }

        @android.webkit.JavascriptInterface
        fun showToast(json: String) {

        }

        private fun isNetworkAvailable(): Boolean {
            val connectivityManager = mContext?.getSystemService(Context.CONNECTIVITY_SERVICE)
            return if (connectivityManager is ConnectivityManager) {
                val networkInfo: NetworkInfo? = connectivityManager.activeNetworkInfo
                networkInfo?.isConnected ?: false
            } else false
        }

    }
android kotlin android-webview
2个回答
0
投票

[Try This代码将帮助您在应用程序中打开网页。

try {
        val builder = CustomTabsIntent.Builder()
        val customTabsIntent = builder.build()
        this.let {
            customTabsIntent.launchUrl(
                this,
                Uri.parse("https://www.google.com/")
            )
        }

    } catch (ex: Exception) {
        Log.e("exBrowser","ex ${ex}")
    }
© www.soinside.com 2019 - 2024. All rights reserved.