Here Snackbar will be shown everytime when internet connection is available or connection lost for user via broadcast receiver.
Snackbar works from api 8 and above so its a cool thing to implement for showing such short messages.
You need to extend your activity with AppCompatActivity for Snackbar.
Add below dependency in your build.gradle compile 'com.android.support:design:22.2.1'
1. MainActivity.java
public class MainActivity extends AppCompatActivity {
public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;
private Snackbar snackbar;
private CoordinatorLayout coordinatorLayout;
private boolean internetConnected=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
coordinatorLayout=(CoordinatorLayout)findViewById(R.id.coordinatorlayout);
}
@Override
protected void onResume() {
super.onResume();
registerInternetCheckReceiver();
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(broadcastReceiver);
}
/**
* Method to register runtime broadcast receiver to show snackbar alert for internet connection..
*/
private void registerInternetCheckReceiver() {
IntentFilter internetFilter = new IntentFilter();
internetFilter.addAction("android.net.wifi.STATE_CHANGE");
internetFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(broadcastReceiver, internetFilter);
}
/**
* Runtime Broadcast receiver inner class to capture internet connectivity events
*/
public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String status = getConnectivityStatusString(context);
setSnackbarMessage(status,false);
}
};
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
public static String getConnectivityStatusString(Context context) {
int conn = getConnectivityStatus(context);
String status = null;
if (conn == TYPE_WIFI) {
status = "Wifi enabled";
} else if (conn == TYPE_MOBILE) {
status = "Mobile data enabled";
} else if (conn == TYPE_NOT_CONNECTED) {
status = "Not connected to Internet";
}
return status;
}
private void setSnackbarMessage(String status,boolean showBar) {
String internetStatus="";
if(status.equalsIgnoreCase("Wifi enabled")||status.equalsIgnoreCase("Mobile data enabled")){
internetStatus="Internet Connected";
}else {
internetStatus="Lost Internet Connection";
}
snackbar = Snackbar
.make(coordinatorLayout, internetStatus, Snackbar.LENGTH_LONG)
.setAction("X", new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbar.dismiss();
}
});
// Changing message text color
snackbar.setActionTextColor(Color.WHITE);
// Changing action button text color
View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.WHITE);
if(internetStatus.equalsIgnoreCase("Lost Internet Connection")){
if(internetConnected){
snackbar.show();
internetConnected=false;
}
}else{
if(!internetConnected){
internetConnected=true;
snackbar.show();
}
}
}
}
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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" android:id="@+id/coordinatorlayout" android:fitsSystemWindows="true" tools:context="com.example.kamalvaid.internetcheckandsnackbar.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout>
3. Add these permissions to manifest file
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Github Link : https://github.com/CammyKamal/BlogTutorials/tree/master/InternetCheckAndSnackBar
Output:


unregisterReceiver(broadcastReceiver);
ReplyDeleteAnd
registerReceiver(broadcastReceiver, internetFilter);
Method is not Resolve