简体   繁体   中英

Internet connection listener not working in android studio

I'm trying to create an Internet connection listener. But not working. I'm not getting any mistakes.I think the NetworkStateChangeReceiver does not work at all. Because Log.e does not appear in logcat. I'm new to Android and it's complicated for me.

Android manifest

<receiver
        android:name=".NetworkStateChangeReceiver">
        <intent-filter >
            <action android:name="com.gdm.retailalfageek.NetworkAvailable" />
        </intent-filter>
    </receiver>

NetworkStateChangeReceiver.java

public class NetworkStateChangeReceiver extends BroadcastReceiver {

public static final String NETWORK_AVAILABLE_ACTION = "com.gdm.retailalfageek.NetworkAvailable";
public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable";

@Override
public void onReceive(Context context, Intent intent) {
    Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION);
    networkStateIntent.putExtra(IS_NETWORK_AVAILABLE,  getConnectionType(context));
    LocalBroadcastManager.getInstance(context).sendBroadcast(networkStateIntent);
    Log.e("Network Available ", "On receive called");
}

@IntRange(from = 0, to = 2)
public static int getConnectionType(Context context) {
    int result = 0; // Returns connection type. 0: none; 1: mobile data; 2: wifi
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            Log.e("Network Available ", "On receive called");
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    Log.e("Network Available ", "On receive called");
                    result = 2;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    Log.e("Network Available ", "On receive called");
                    result = 1;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                Log.e("Network Available ", "On receive called");
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    Log.e("Network Available ", "On receive called");
                    result = 2;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    Log.e("Network Available ", "On receive called");
                    result = 1;
                }
            }
        }
    }
    return result;
}}

Application class

     @Override
  public void onCreate() {
    super.onCreate();

    IntentFilter filter = new IntentFilter();
    filter.addAction("isNetworkAvailable");
    registerReceiver(new NetworkStateChangeReceiver(), filter);

  }

Hope the code given below help you.

  1. Register a BroadcastReceiver in Manifest.file

     <receiver android:name=".MyBroadcastReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 
  2. Set internet permissions in Manifest

      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET"/> 
  3. Implement receiving class.

      public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // This will execute upon receiving event } } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM