我对Android比较陌生,
我已阅读有关检测网络连接更改的相关文章,并已实现此BroadcastReceiver
子类,对AndroidManifest.xml进行了必要的添加,并按预期收到必要的状态更改广播:
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
问题是:如何在/ Activity
子类中接收或转发这些通知?显然在我的NetworkStateReceiver
子类中创建了Activity
的实例并覆盖了onReceive
,但这并不能解决问题。
提前感谢任何指示...
修改
我最终从上面的Intent
广播onReceive
,如此:
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...
}
}
}
答案 0 :(得分:1)
我建议使用其中之一
1)接口方法。因此,声明一个具有networkChanged()
方法的接口,并让拥有此BroadcastReceiver
的类保留一个类列表,这些类希望通过本地List<InterfaceName>
2)跳过界面创建并使用订阅实用程序。我最喜欢的是 https://github.com/greenrobot/EventBus
和
https://gist.github.com/bclymer/6708819(较小,较少使用,也是免责声明:我写了这个)
使用这些,您可以创建包含属性的事件类,然后订阅并发布这些类的实例。
在您的活动中
@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;
}
}
此示例使用第二个订阅实用程序(我的)。