Android WebView 在返回 Web View 页面/活动后不会加载网址



根据WiFi连接(无论是"打开"还是"关闭"(,我想显示两个视图/活动之一:无连接或带URL的WebView。我正在使用BroadcastReceiver检查连接。

加载应用程序时,一切似乎都很好,但当我将WiFi切换为"关闭"然后再次"打开"时(每当我离开WebView然后回来时(,WebView URL不会加载(获取网页不可用消息(。没有连接视图总是有效的,所以我假设WebView有一些问题。此外,如果我添加5秒延迟,然后再次执行loadUrl,WebView也可以工作。我还可以看到WiFi状态检测正确。

如有任何意见,我将不胜感激。我在谷歌上搜索过,但我能找到的只是基本的WebView示例。我是安卓系统的新手,所以可能我错过了一些基本的东西。提前感谢您的帮助!

```类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((:指示是否可以进行网络连接。A.当出现持续或半持续状态时,网络不可用阻止了连接到该网络的可能性。

isConnected((:指示网络连接是否存在可以建立连接并传递数据。

最新更新