Чтобы определить, когда устройство подключено к сети, запросите разрешение <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
, а затем вы можете проверить с помощью следующего кода. Сначала определите эти переменные как переменные класса.
private Context c;
private boolean isConnected = true;
В вашем onCreate()
методе инициализации c = this;
Затем проверьте подключение.
ConnectivityManager connectivityManager = (ConnectivityManager)
c.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
if (ni.getState() != NetworkInfo.State.CONNECTED) {
// record the fact that there is not connection
isConnected = false;
}
}
Затем, чтобы перехватить WebView
, вы можете сделать что-то вроде следующего. Если вы используете это, вы, вероятно, захотите настроить сообщения об ошибках, чтобы включить некоторую информацию, которая доступна в методе onReceivedError
.
final String offlineMessageHtml = "DEFINE THIS";
final String timeoutMessageHtml = "DEFINE THIS";
WebView browser = (WebView) findViewById(R.id.webview);
browser.setNetworkAvailable(isConnected);
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (isConnected) {
// return false to let the WebView handle the URL
return false;
} else {
// show the proper "not connected" message
view.loadData(offlineMessageHtml, "text/html", "utf-8");
// return true if the host application wants to leave the current
// WebView and handle the url itself
return true;
}
}
@Override
public void onReceivedError (WebView view, int errorCode,
String description, String failingUrl) {
if (errorCode == ERROR_TIMEOUT) {
view.stopLoading(); // may not be needed
view.loadData(timeoutMessageHtml, "text/html", "utf-8");
}
}
});