gpt4 book ai didi

android在 Activity 和广播接收器之间进行通信

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:07:01 38 4
gpt4 key购买 nike

我有一个 Activity 显示从服务器获取的一些数据。如果没有连接可用,activity 显示一些缓存数据;如果连接可用, Activity 获取数据并显示它。一切都按预期工作。
现在,我想让我的 Activity 在连接发生后立即重新加载数据。我正在使用一个扩展 BroadcastReceiver 的简单接收器:

public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
//what to do here?
}
}
}

广播接收器在我的 list 文件中声明如下:

<receiver android:name=".ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>

在我的 Activity 中,我注册了接收者:

ConnectionChangeReceiver receiver = new ConnectionChangeReceiver(); this.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

现在,我很困惑下一步该做什么。当执行 onReceive 方法时,如何让我的 Activity 意识到这一点?我知道我可以开始一项新 Activity ,但这并不是我真正想要的。我应该将 ConnectionChangeReceiver 声明为我的 Activity 的私有(private)类吗?或者还有其他解决办法吗?

最佳答案

我认为将接收器构建为您的 Activity 的私有(private)子类是实现此目的的方法。这样您就可以控制 Activity 中的事件和数据。然后您只需创建它的一个实例并像上面那样从代码中注册接收器。

请注意,您不必在 list 和代码中都注册您的接收器。其中之一就足够了—— list 基本上是一个“静态”注册,而在代码中执行它允许在运行时进行动态注册。此外,当您在 list 中注册时,您的接收器的一个新实例将自动从系统中创建、执行和终止。在代码中执行 reg 允许指向一个特定实例。

关于android在 Activity 和广播接收器之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6882476/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com