Broadcast 动态网络监听

动态监听网络状态广播示例:
(1) AndroidManifest.xml中加入权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
(2)MainActivity.java文件

public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private MyReceiver myReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intentFilter = new IntentFilter();
    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    myReceiver = new MyReceiver();
    registerReceiver(myReceiver,intentFilter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(myReceiver);
}

class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"网络状态发生变化"+getNetworkType(),Toast.LENGTH_SHORT).show();
    }
}

public static final int NETTYPE_WIFI = 1;
public static final int NETTYPE_CMWAP = 2;
public static final int NETTYPE_CMNET = 3;

public int getNetworkType(){
    int netType = 0;
    ConnectivityManager connectivityManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo == null){
        return netType;
    }
    int nType = networkInfo.getType();
    if (nType == ConnectivityManager.TYPE_MOBILE){
        String extraInfo = networkInfo.getExtraInfo();
        if (!TextUtils.isEmpty(extraInfo)){
            if (extraInfo.toLowerCase().equals("cmnet")){
                netType = NETTYPE_CMNET;
            }else{
                netType = NETTYPE_CMWAP;
            }
        }
    }else if (nType == ConnectivityManager.TYPE_WIFI){
        netType = NETTYPE_WIFI;
    }
    return netType;
 }
}

getNetworkType() 方法中,首先通过getSystemService() 方法得到了ConnectivityManager实例,这是一个系统服务类,专门用于管理网络连接的。然后调用它的getActiveNetworkInfo() 方法得到NetworkInfo的实例,接着调用NetworkInfo的getType() 方法,就可以判断出当前网络状态了。

猜你喜欢

转载自blog.csdn.net/sunshine_a70/article/details/86521588