Android BroadcastReceiver

本文介绍在Android应用中如何使用两种不同方法监听网络状态变化:静态注册与动态注册。静态注册通过在Manifest文件中配置实现,而动态注册则是在Java代码中完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先假设现在有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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值