0

我对Android比较陌生,

我已阅读有关检测网络连接更改的相关文章并实现了此BroadcastReceiver子类,对 AndroidManifest.xml 进行了必要的添加,并且按预期收到了必要的状态更改广播:

public class NetworkStateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

    }
}

问题是:如何在我的Activity子类中接收或转发这些通知?NetworkStateReceiver显然,在我的子类中创建一个实例Activity并覆盖onReceive那里并不能解决问题。

在此先感谢您的任何指点...

编辑:

我最终像这样IntentonReceive上面广播了一个:

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...
        }
    }
}
4

1 回答 1

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

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

于 2013-10-11T16:15:28.337 回答