В зависимости от соединения WiFi (будь то «включено» или «выключено»), я хочу отобразить одно из двух представлений / действий: Нет соединения или WebView с URL.Я использую BroadcastReceiver
для проверки соединения.
Кажется, что все работает нормально, когда приложение загружается, но когда я выключаю WiFi, а затем снова включаю (всякий раз, когда я покидаю WebView, а затем прихожуназад), URL-адрес WebView не загружается (получить сообщение о недоступности веб-страницы).Представление «Нет подключения» работает всегда, поэтому я предполагаю, что с WebView что-то есть.А также, WebView работает, если я добавлю 5-секундную задержку, а затем снова сделаю loadUrl
.Я также вижу, что статус WiFi определяется правильно.
Буду признателен за любой ввод.Я гуглил это, но все, что я могу найти, это простые примеры WebView.Я очень плохо знаком с Android, поэтому, может быть, мне не хватает чего-то простого.Заранее благодарим за помощь!
`` `класс 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")
})
}
}
}
}
}
}` ``