在代碼中動態註冊,不需要在AndroidManifest.xml裏靜態註冊,靜態註冊在不打開App的情況下,有可以接收到廣播。
public class MainActivity extends Activity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//監聽網絡的狀態;網絡狀態改變就會被調動。
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
}
創建NetworkChangeReceiver類繼承BroadcaseReceiver
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//枚舉 enum NetworkStatus {DisConnect,Mobile,Wifi}
ConfigConstant.NetworkStatus status
=getConnectType();
switch(status){
case DisConnect:
break;
case Mobile:
break;
case Wifi:
break;
}
}
/*
*獲取網絡狀態,
*/
private ConfigConstant.NetworkStatus getConnectType() {
ConnectivityManager connMgr =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
if (activeInfo != null && activeInfo.isConnected()){
if (activeInfo.getType() == ConnectivityManager.TYPE_WIFI)
return ConfigConstant.NetworkStatus.Wifi;
else if (activeInfo.getType() == ConnectivityManager.TYPE_MOBILE)
return ConfigConstant.NetworkStatus.Mobile;
}
return ConfigConstant.NetworkStatus.DisConnect;
}
網絡狀態一旦發生改變,會調用NetworkChangeReceiver 的onReceive(),再去獲取網絡狀態。
aaaa