android中网络编程不可避免地要监听网络状态,wifi或者3G以及以太网,并根据当前状态做出相应决策.
在MyReceiver类中的onReceive方法中获得系统服务
ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo mobInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if(wifiInfo.isConnected){ Toast.makeText(context, "wifi isConnected", Toast.LENGTH_SHORT).show(); return; }else if(mobInfo.isConnected()){ Toast.makeText(context, "mob isConnected", Toast.LENGTH_SHORT).show(); return; }else{ Toast.makeText(context, "none is Connected", Toast.LENGTH_SHORT).show(); return; }
静态注册方法:
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver>
或者动态注册方法(MainActivity中):
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); myReceiver = new myWifiReceiver(); registerReceiver(myReceiver, filter); } @Override protected void onDestroy() { unregisterReceiver(myReceiver); super.onDestroy(); }
权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
这里要注意两点:
1.动态注册并且onDestroy()时解除注册的话,退出后就不接受广播了.
但是再次打开应用时会执行onReceive()方法.
2.较高api版本中要求打开过应用广播接收者才会生效.