现在的位置: 首页 > 综合 > 正文

Android BroadcastReceiver

2014年09月05日 ⁄ 综合 ⁄ 共 1192字 ⁄ 字号 评论关闭

先假设现在有MainActivity.java和NetworkAndroid.java这两个文件,要注册一个监听,监听网络的变化。

注册有两种方式:
1. (静态注册)
在Manifest.xml的application中
<receiver android:name=".NetWorkAndroid">
     <intent-filter > 
          <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     </intent-filter>
</receiver>

2.(动态注册)
在MainActivity.java中加入
private NetWorkAndroid mNetworkStateReceiver = null;
public void addNetworkObserver() {
     if (null != mNetworkStateReceiver) {
          return;
     }
     mNetworkStateReceiver = new NetWorkAndroid();
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
     this.registerReceiver(mNetworkStateReceiver, filter);
}
    
public void removeNetworkObserver() {
     if (null == mNetworkStateReceiver) {
          return;
     }
     this.unregisterReceiver(mNetworkStateReceiver);
     mNetworkStateReceiver = null;
}

在需要注册的时候调用addNetworkObserver(),需要注销的时候调用removeNetworkObserver()
一般当检测到程序进入后台时,便需要注销,待程序回来后再注册,否则当程序被后台手动强制关闭后,网络产生变化,便会出现“unfortunatetly, xxx has stoped”

关于注册和注销的时机,如果是cocos2d-x游戏,建议在
void AppDelegate::applicationDidEnterBackground()
void AppDelegate::applicationWillEnterForeground()

其余情况,只要对称就好
例如
MainActivity.onStart()和MainActivity.onStop()
MainActivity.onResume和MainActivity.onPause()

抱歉!评论已关闭.