Android监听网络变化

注册方式:

1.

<receiver
            android:name="包名.ConnectionChangeReceiver"
            android:label="NetworkConnection" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
</receiver>

 2.

	/*
	 * 手动注册网络状态变化,或在清单文件配置。
	 */
	private void registerNetStateReceiver() {
		Log.i("--bxm register netstate receiver...");
		mConnectivityReceiver = new ConnectionChangeReceiver();
		IntentFilter filter = new IntentFilter();
		filter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
		registerReceiver(mConnectivityReceiver, filter);
	}

 其中 ConnectionChangeReceiver类为: 

public class ConnectionChangeReceiver extends BroadcastReceiver {

	private final static NetConnectionStateMgr dataStateMgr = NetConnectionStateMgr.getInstance();

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i("--ConnectivityReceiver.onReceive()...");
		String action = intent.getAction();
		Log.i("--action=" + action);

		ConnectivityManager connectivityManager = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);

		NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

		if (networkInfo != null) {
			Log.i("--Network Type  = " + networkInfo.getTypeName());
			Log.i("--Network State = " + networkInfo.getState());
			if (networkInfo.isConnected()) {
				Log.i("--bxm Network connected");
				dataStateMgr.setDataState(NetConnectionStateMgr.DATA_CONNECTIONED);
			}
		} else {
			Log.e("--bxm Network unavailable");
			dataStateMgr.setDataState(NetConnectionStateMgr.DATA_CONNECTION_UNAVAILABLE);
		}

		dataStateMgr.notifyDataSetChanged();
	}
}

 上面的NetConnectionStateMgr是自己实现的观察者类,方便用而已。 

注意权限配置:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

猜你喜欢

转载自ldl8818.iteye.com/blog/2030029