Java 检测Android活动子类中的连接更改
我对安卓系统比较陌生 我已经阅读了有关检测网络连接变化的相关文章,并实现了这个Java 检测Android活动子类中的连接更改,java,android,networking,android-activity,broadcastreceiver,Java,Android,Networking,Android Activity,Broadcastreceiver,我对安卓系统比较陌生 我已经阅读了有关检测网络连接变化的相关文章,并实现了这个BroadcastReceiver子类,对AndroidManifest.xml进行了必要的添加,我收到了预期的必要状态变化广播: public class NetworkStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } }
BroadcastReceiver
子类,对AndroidManifest.xml进行了必要的添加,我收到了预期的必要状态变化广播:
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
问题是:我如何在我的活动
子类中接收或转发这些通知?显然,在我的Activity
子类中创建networkstateceiver
的实例,并在那里重写onReceive
不会起作用
提前感谢您的指点
编辑:
我最后从上面的onReceive
广播了一个Intent
,如下所示:
Intent target = new Intent(CONNECTIVITY_EVENT);
target.putExtra(CONNECTIVITY_STATE, networkInfo.isConnected());
context.sendBroadcast(target);
并在我的活动中收到类似的信息:
@Override
protected String[] notifyStrings() {
return ArrayUtils.addAll(super.notifyStrings(), new String[] {NetworkStateReceiver.CONNECTIVITY_EVENT});
}
@Override
protected void notifyEvent(Intent intent, String action) {
super.notifyEvent(intent, action);
if (action != null) {
if (action.equalsIgnoreCase(NetworkStateReceiver.CONNECTIVITY_EVENT)) {
boolean isConnected = intent.getBooleanExtra(NetworkStateReceiver.CONNECTIVITY_STATE, true);
// Do something...
}
}
}
我建议使用这两种方法中的任何一种
1) 接口方法。因此,请声明一个具有networkChanged()
方法的接口,并让拥有该BroadcastReceiver
的类使用本地list
保存一个类列表,这些类希望收到网络更改的通知
2) 跳过界面创建并使用订阅实用程序。我的两个最爱是
及
(更小,使用更少,也是免责声明:我写了这个)
通过这些,您可以创建具有属性的事件类,然后订阅和发布这些类的实例
在你的活动中
@Override
public void onCreate() {
...
EventBus.getInstance().subscribe(this, MyType.class);
}
@Override
public void onDestroy() {
...
EventBus.getInstance().unsubscribe(this, MyType.class);
}
@Override
public void newEvent(Object event) {
if (event instanceOf MyType) {
// do stuff
}
}
然后在您的广播接收器中
@Override
public void onReceive(Context context, Intent intent) {
EventBus.post(new MyType(true));
}
示例MyType
public class MyType {
public boolean networkEnabled;
public MyType(boolean networkEnabled) {
this.networkEnabled = networkEnabled;
}
}
此示例使用第二个订阅实用程序(我的)