我对 Android 还比较陌生,
我已阅读有关检测网络连接更改的相关文章,并实现了此 BroadcastReceiver
子类,对 AndroidManifest.xml 进行了必要的添加,并且我按预期收到了必要的状态更改广播:
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
问题是:我如何在我的 Activity
子类中接收或转发这些通知?显然,在我的 Activity
子类中创建一个 NetworkStateReceiver
实例并覆盖 onReceive
并不能解决问题。
提前感谢您的指点...
编辑:
我最终从上面的 onReceive
广播了 Intent
,如下所示:
Intent target = new Intent(CONNECTIVITY_EVENT);
target.putExtra(CONNECTIVITY_STATE, networkInfo.isConnected());
context.sendBroadcast(target);
并在我的Activity
中接收它,如下所示:
@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)接口(interface)方法。因此声明一个具有 networkChanged()
的接口(interface)方法,并拥有拥有此 BroadcastReceiver
的类保留想要通过本地 List<InterfaceName>
获得网络更改通知的类列表
2) 跳过创建界面并使用订阅实用程序。我最喜欢的两个是 https://github.com/greenrobot/EventBus
和
https://gist.github.com/bclymer/6708819 (较小,较少使用,同时免责声明:我写了这个)
使用这些,您可以创建具有属性的事件类,然后订阅和发布这些类的实例。
在您的 Activity 中
@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
}
}
然后在你的 BroadcastReceiver
中
@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;
}
}
此示例使用第二个订阅实用程序(我的)。
关于java - 检测 Android Activity 子类中的连接变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322550/