Skip to content

Instantly share code, notes, and snippets.

@PasanBhanu
Last active July 25, 2023 13:28
Show Gist options
  • Save PasanBhanu/730a32a9eeb180ec2950c172d54bb06a to your computer and use it in GitHub Desktop.
Save PasanBhanu/730a32a9eeb180ec2950c172d54bb06a to your computer and use it in GitHub Desktop.
Check Internet Connection in Android (API Level 29) Using Network Callback
/*
You need to call the below method once. It register the callback and fire it when there is a change in network state.
Here I used a Global Static Variable, So I can use it to access the network state in anyware of the application.
*/
// You need to pass the context when creating the class
public CheckNetwork(Context context) {
this.context = context;
}
// Network Check
public void registerNetworkCallback()
{
try {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(Network network) {
Variables.isNetworkConnected = true; // Global Static Variable
}
@Override
public void onLost(Network network) {
Variables.isNetworkConnected = false; // Global Static Variable
}
}
);
Variables.isNetworkConnected = false;
}catch (Exception e){
Variables.isNetworkConnected = false;
}
}
public class Variables {
// Global variable used to store network state
public static boolean isNetworkConnected = false;
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Register Callback - Call this in your app start!
CheckNetwork network = new CheckNetwork(getApplicationContext());
network.registerNetworkCallback();
// Check network connection
if (Variables.isNetworkConnected){
// Internet Connected
}else{
// Not Connected
}
}
}
@sparsh820
Copy link

@SuppressLint("NewApi")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void doWork() {

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


    cm.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback(){

        public void onAvailable(Network network) {
            Log.e("hola", "The default network is now: " + network);
             network=cm.getActiveNetwork();
              if(network!=null){
                  SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
                  String minMagnitude = sharedPrefs.getString(
                          getString(R.string.settings_min_magnitude_key),
                          getString(R.string.settings_min_magnitude_default));
                  String orderBy = sharedPrefs.getString(
                          getString(R.string.settings_order_by_key),
                          getString(R.string.settings_order_by_default)
                                                  );

                  if (orderBy.equals(getString(R.string.settings_order_by_default))){
                      extractdata(minMagnitude, "magnitude-asc");
                  }else{
                      extractdata(minMagnitude,orderBy);

                  }

              }
        }

        public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
            super.onCapabilitiesChanged(network, networkCapabilities);
            Log.i(TAG,network+" "+networkCapabilities.toString()+" "+networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET));
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    View loadingIndicator = findViewById(R.id.progressBar);
                    loadingIndicator.setVisibility(View.VISIBLE);
                    rvCourses=findViewById(R.id.rvCourses);
                    mEmptyTextview=findViewById(R.id.empty_view);
                    mEmptyTextview.setVisibility(View.GONE);
                    rvCourses.setVisibility(View.VISIBLE);
                }
            });
            if(networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET)){

                SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
                String minMagnitude = sharedPrefs.getString(
                        getString(R.string.settings_min_magnitude_key),
                        getString(R.string.settings_min_magnitude_default));
                String orderBy = sharedPrefs.getString(
                        getString(R.string.settings_order_by_key),
                        getString(R.string.settings_order_by_default)
                );

                if (orderBy.equals(getString(R.string.settings_order_by_default))){
                    extractdata(minMagnitude, "magnitude-asc");
                }else{
                    extractdata(minMagnitude,orderBy);

                }


            }
        }

           public void onLost(Network network) {
            /*View loadingIndicator = findViewById(R.id.progressBar);
            loadingIndicator.setVisibility(View.GONE);
            Log.e(TAG, "The application no longer has a default network. The last default network was " + network);
            rvCourses=findViewById(R.id.rvCourses);
            mEmptyTextview=findViewById(R.id.empty_view);
            mEmptyTextview.setText("NO INTERNET CONNECTION");
            rvCourses.setVisibility(View.GONE);
            mEmptyTextview.setVisibility(View.VISIBLE);*/

            runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    View loadingIndicator = findViewById(R.id.progressBar);
                    loadingIndicator.setVisibility(View.GONE);
                    Log.e(TAG, "The application no longer has a default network. The last default network was " + network);
                    rvCourses=findViewById(R.id.rvCourses);
                    mEmptyTextview=findViewById(R.id.empty_view);
                    mEmptyTextview.setText("NO INTERNET CONNECTION");
                    rvCourses.setVisibility(View.GONE);
                    mEmptyTextview.setVisibility(View.VISIBLE);

                }
            });


        }





    }

    );


}

@sparsh820
Copy link

Hope this helps ;P

@mirsahib
Copy link

@PasanBhanu
please explain why you are using

        NetworkRequest.Builder builder = new NetworkRequest.Builder();

@Abhinav1217
Copy link

@PasanBhanu please explain why you are using

        NetworkRequest.Builder builder = new NetworkRequest.Builder();

Reminiscent of older code, Before we found about registerDefault from google team, older version of code was basically build a network request object, add the wifi module and/or bluetooth module (basically any and all network interface you want to observe) and then use that object to registerNetworkCallback

When you use registerDefaultNetworkCallback, it basically connects to the lower level network pool with default options, so you don't need to (but you still can if you want) build your own network object.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment