java - 检测 Android Activity 子类中的连接变化

标签 java android networking android-activity broadcastreceiver

我对 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/

相关文章:

networking - 什么是监控网络事件的好工具

java - (Android) 如何快速地将大量整数保存到 SQLite 数据库中?

java - Spring Data + JPA > SQL INSERT 后未从数据库中获取 "mappedBy"属性的新条目

java - 签名的 jar 文件还可以包含来自 'chain of trust' 的多个证书吗?

android - 如何升级用于在 Google Play 商店上签名 Android 应用程序的私钥?

networking - 端口和套接字有什么区别?

java - 使用 UMLGraph 生成序列图

java - ArrayAdapter要求资源ID为DialogFragment中的TextView

Android ProgressDialog 不适用于移动网络

networking - 许多小型 UDP 数据报与更少、更大的数据报