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