Android 返回 WebView page/activity 后 WebView 未加载 url

Android WebView doesn't load url after returning to WebView page/activity

根据 WiFi 连接(无论是 "on" 还是 "off"),我想显示两者之一 views/activities:无连接或 WebView 与 URL。我正在使用 BroadcastReceiver 检查连接。

应用程序加载时一切似乎都正常,但是当我切换 WiFi "off" 然后再次 "on" 时(每当我离开 WebView 然后回来时),WebView URL不加载(获取网页不可用消息)。没有连接视图总是有效,所以我假设 WebView 有一些东西。而且,如果我添加 5 秒延迟然后再次执行 loadUrl,WebView 会起作用。我还可以看到正确检测到 WiFi 状态。

如有任何意见,我将不胜感激。我用谷歌搜索过,但我能找到的只是基本的 WebView 示例。我是 Android 的新手,所以我可能遗漏了一些基本知识。预先感谢您的帮助!

``` class WebViewActivity:AppCompatActivity() {

private lateinit var wifiManager : WifiManager
private lateinit var intentMain: Intent
private lateinit var webView: WebView

override fun onCreate(savedInstanceState: Bundle?) {
    Log.d("WIFI_TEST", "WV: onCreate")
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_web_view)

    wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
    intentMain = Intent(this, MainActivity::class.java)
    webView = findViewById(R.id.webview)

    webView.settings.javaScriptEnabled = true
    webview.settings.domStorageEnabled = true
    webView.webViewClient = WebViewClient()
    webView.loadUrl("https://google.com")
}

override fun onStart() {
    super.onStart()
    val intentFilter = IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)
    registerReceiver(wifiStateReceiver, intentFilter)
}

override fun onStop() {
    super.onStop()
    webView.destroy()
    unregisterReceiver(wifiStateReceiver)
}

override fun onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack()
    } else {
        super.onBackPressed()
    }
}

private val wifiStateReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val wifiStateExtra = intent.getIntExtra(
            WifiManager.EXTRA_WIFI_STATE,
            WifiManager.WIFI_STATE_UNKNOWN
        )

        when (wifiStateExtra) {
            WifiManager.WIFI_STATE_DISABLED -> {
                Log.d("WIFI_TEST", "WV: OFF")
                startActivity(intentMain)
            }
            WifiManager.WIFI_STATE_ENABLED -> {
                Log.d("WIFI_TEST", "WV: ON")
                // Works with delay with at least 5 sec
                // Why?
                Timer().schedule(5000) {
                    Log.d("WIFI_TEST", "WV: delay")
                    webView.post(Runnable {
                        webView.loadUrl("https://google.com")
                    })
                }
            }
        }
    }
}

} ```

请记住,当 Wifi 再次启用时可能可用,但您必须等待几毫秒才能连接。

  WifiManager.WIFI_STATE_ENABLED -> {
                Log.d("WIFI_TEST", "WV: ON")
                // Works with delay with at least 5 sec
                // Why?
                Timer().schedule(5000) {
                    Log.d("WIFI_TEST", "WV: delay")
                    webView.post(Runnable {
                        webView.loadUrl("https://google.com")
                    })
                }
            }

isAvailable(): Indicates whether network connectivity is possible. A network is unavailable when a persistent or semi-persistent condition prevents the possibility of connecting to that network.

isConnected(): Indicates whether network connectivity exists and it is possible to establish connections and pass data.