0

I would like to put a Network Detector in an Android application, to inform a Screen immediately the Network state even if that state is changing. I have study similar questions in: Android: Internet connectivity change listener

So my Java code in Main Activity is:

package com.example.netdetector;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class MainActivity extends AppCompatActivity {
    private TextView Screen;

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Screen = (TextView) findViewById(R.id.Screen);
        Screen.setText("Start!");

        ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                // network available
                Screen.setText("Net On!");
            }

            @Override
            public void onLost(Network network) {
                // network unavailable
                Screen.setText("Net Off!");
            }
        };

        ConnectivityManager connectivityManager =
                (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            connectivityManager.registerDefaultNetworkCallback(networkCallback);
        } else {
            NetworkRequest request = new NetworkRequest.Builder()
                    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build();
            connectivityManager.registerNetworkCallback(request, networkCallback);
        }
    }
}

The AndroidManifest.xml is:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.netdetector">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.NetDetector">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

The Layout activity_main.xml is:

<?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">

    <TextView
        android:id="@+id/Screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Hello World!"
        android:textSize="25sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.222" />

</androidx.constraintlayout.widget.ConstraintLayout>

There are some issues:

  1. Starting the App with the Network Off, the Screen displays "Start!" instead of "Net Off!"
  2. Starting the App with the Network On, the Screen displays "Net On" that is fine
  3. On changing Internet state while the app is running the Screen displays the right text for a few moments and the app closes immediately.

How can I fix 1 and 3? What went wrong?

Thanks Nickolas

Psiloritis
  • 19
  • 4
  • Your code and the question you are referring on your post have nothing alike, in fact this question is answered on that post that you linked. You have to use a listener in order to get the network state changes – javdromero Mar 10 '21 at 21:37
  • Check answer in here https://stackoverflow.com/questions/32547006/connectivitymanager-getnetworkinfoint-deprecated/54641263#54641263 – Zain Mar 10 '21 at 22:10
  • Yes I did add a listener and the app closes every time the network changes state – Psiloritis Mar 11 '21 at 05:04
  • In this answer the check if net is available or not is executing every time the function isOnline() is being called. I would like to have a listener, so to inform me about net state without calling the function isOnline() manually. Thanks – Psiloritis Mar 11 '21 at 05:14

0 Answers0