我的android项目和七项活动中有七项活动,我想监视网络断开连接。我创建了一个networkreceiver
类,当启用或禁用wifi时会收到通知。
public class NetworkReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager conMan = (ConnectivityManager) context.
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMan.getActiveNetworkInfo();
if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI)
Log.d("WifiReceiver", "Have Wifi Connection");
else
Log.d("WifiReceiver", "Don't have Wifi Connection");
}
}
并在清单
<receiver android:name=".NetworkReceiver" >
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
我的问题是,由于我创建了它作为一个单独的类,我没有得到如何获取wifi未启用的每个活动的通知。或者我是否必须在每个活动中创建一个网络接收器作为内部类。 / p>
答案 0 :(得分:1)
我认为处理程序的答案有点臭 - 最大的气味是你必须保持广播接收器的实例 - 在请求实例化的清单接收器。而是在清单中删除注册并注册取消注册接收器onSart / Stop你的活动 - 不需要让接收器成为内部类。取消注册onStop可能无法在Froyo上运行,但是嘿 - 我们在KitKat
这种方式是更好的IMO,因为你应该在它应该发出信号的活动中使用接收器,而不是在接收器类中混合活动和接收器逻辑。另外,如果您设法保留对接收器的引用,请告诉我如何 - 我很好奇
答案 1 :(得分:0)
一个很好的解决方案如下工作。您的广播接收器有一个对象数组(每个活动一个),当通知到达时,您循环访问对象,让他们知道WiFi状态已更改。
详情:
首先,您的广播接收器实例应该可用到所有活动(通过静态变量,单身或您想要的)。
其次,每个活动都有一个Handler
对象来处理事件,我们称之为mHandler
。
第三,广播接收者有一个处理程序数组,我们称之为'mHandlerArray'。
在您的广播接收器类中有一个数组的Handler 对象。每个活动通过将指针传递给每个Activity拥有的mHandler
来自我订阅。您的广播接收器可以有两种方法:一种是注册,另一种是注销。
因此,每个活动都会实施onResume()
和onPause()
void onResume()
{
mBroadcastReceiver.register(mHandler);
}
void onPause()
{
mBroadcastReceiver.unregister(mHandler);
}
广播接收器执行此操作:
void register(Handler handler)
{
mHandlerArray.add(handler);
}
void register(Handler handler)
{
mHandlerArray.remove(handler);
}
最后,当WiFi状态发生变化时,从onReceive()
迭代mHandlerArray
并向每个处理程序发送一条消息。每个Activity都相应地处理消息。
答案 2 :(得分:-1)
如果您在清单中注册接收器,那么只有定义的类才能接收广播信息。因此,您可以在应用程序类中定义register和unregister选项,然后Broadcast-receiver方法可以保留您的活动类(哪个活动类需要知道网络状态)
答案 3 :(得分:-2)
创建一个单独的类Networkinfo并创建一个方法来检查Internet连接。
如果您想检查互联网,那么您可以使用该类的对象调用此方法。 以下链接将有助于检测连接。
祝你好运。