Reputation:
I am building an app in Android Studio with Java that uses WebView to display a site inside the app. I want to switch the app's activity to my no_internet.xml activity whenever the user's internet connection is disconnected, so rather than seeing the default Android disconnection screen, they will see my custom one with a retry button. Here is my code for my activity_main.xml file:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp" >
</WebView>
</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.packagename;
import androidx.appcompat.app.AppCompatActivity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webView.loadUrl("websitename.com");
webView.setWebViewClient(new WebViewClient());
if (isInternetOn()){
webView.setVisibility(View.VISIBLE);
no_internet_view.setVisibility(View.GONE);
} else {
webView.setVisibility(View.GONE);
no_internet_view.setVisibility(View.VISIBLE);
}
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed(); //maybe shove option first later
}
}
public boolean isInternetOn() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
}
How can I switch to this activity (rather than the default no-internet screen) when they don't have an internet connection? Thanks!
Upvotes: 0
Views: 334
Reputation: 63
first of all you need to check the internet connection using code bellow :
public boolean isInternetOn() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
then add some view in activity bellow the webview
simulate to this :
<LinearLayout
android:id="@+id/no_internet_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
////add your no internet button and text here
</LinearLayout>
and finally add this in your OnCreate()
to check the internet and control the visibility of view
if (isInternetOn()){
mWebview.setVisibility(View.VISIBLE);
noInternetView.setVisibility(View.GONE);
}else{
mWebview.setVisibility(View.GONE);
noInternetView.setVisibility(View.VISIBLE);
}
Update:
the full code is :
import androidx.appcompat.app.AppCompatActivity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView)findViewById(R.id.webView);
LinearLayout no_internet_view = (LinearLayout)findViewById(R.id.no_internet_view);//////this line for define no_internet_view
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webView.loadUrl("websitename.com");
webView.setWebViewClient(new WebViewClient());
if (isInternetOn()){
webView.setVisibility(View.VISIBLE);
no_internet_view.setVisibility(View.GONE);
} else {
webView.setVisibility(View.GONE);
no_internet_view.setVisibility(View.VISIBLE);
}
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed(); //maybe shove option first later
}
}
public boolean isInternetOn() {
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
}
Upvotes: 1