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.
根据 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.