检测Android Activity子类中的连接更改

时间:2013-10-11 16:05:27

标签: java android networking android-activity broadcastreceiver

我对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...
        }
    }
}

1 个答案:

答案 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;
    }
}

此示例使用第二个订阅实用程序(我的)。