user19036822
user19036822

Reputation:

Change activity when network is disconnected

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>
This is the entire MainActivity.java file:

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

Answers (1)

just developer
just developer

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

Related Questions