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

Mag*_*gie 5 android broadcastreceiver

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

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? 
        } 
     }
}
Run Code Online (Sandbox Code Playgroud)

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

<receiver android:name=".ConnectionChangeReceiver"
          android:label="NetworkConnection">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我注册了接收器:

ConnectionChangeReceiver receiver = new ConnectionChangeReceiver(); this.registerReceiver(接收者,新的IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

现在,我很困惑,接下来要做什么.当执行onReceive方法时,如何让我的活动意识到这一点?我知道我可以开始一项新活动,但这不是我想要的.我应该将ConnectionChangeReceiver声明为我的活动的私有类吗?或者还有其他解决方案吗?

小智 11

我认为将接收器构建为活动的私有子类是进入这里的方法.这样,您就可以控制活动中的事件和数据.然后你可以创建它的一个实例并像上面那样从代码注册接收器.

请注意,您不必在清单和代码中注册接收器.其中一个是enugh - 清单基本上是一个"静态"注册,而在代码中执行它允许在运行时动态注册.此外,当您在清单中注册时,将自动从系统创建接收器的新实例,执行并终止.在代码中执行reg可以指向一个特定的实例.