您的位置:首页 > 移动开发 > Android开发

Android BroadcastReceiver

2014-03-10 12:36 381 查看
先假设现在有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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: