使用广播接收器重新启动互联网时的刷新活动



好吧,我是一个初学者,第一次接触广播接收器,即使有这么多搜索。对不起,我还有一个项目要在几个小时内完成。如果有人能帮助我,我会非常感激。我想这很简单。我只想在互联网恢复时部署一个功能checkNetwork(这正在工作)。我有一个类,我通过broadcastReceiver发送一个意向。在我的意图中,我详细说明了哪节课会收到这个。这是正确的吗?

public class NetworkChangeBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = NetworkChangeBroadcastReceiver.class.getSimpleName();
public NetworkChangeBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if(NetworkHelper.networkIsAvailable(context)){
Log.i(TAG, "there is net ");
Intent serviceIntent = new Intent(context, NowPlayingMoviesFragment.class);
context.startService(serviceIntent);
}
else{
Log.d(TAG, "wifi is not available");
}
}

我认为问题是当现在播放的电影片段(类)收到:

在那里插入什么?ResumeBroadcastReceiver=新的ResumeBroadcast Receiver()?我也不知道该在意向过滤器中放什么。

Bellow现在是一个私人课堂播放电影碎片

私有类ResumeBroadcastReceiver扩展BroadcastReceiver{

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

您可以用几种不同的方法来实现这一点。如果broadcastReciever只在片段代码中使用,那么它可以存在于片段代码中,但我已经尝试尽可能少地更改代码。首先,在7.0及更高版本中,拦截清单中的连接更改已被弃用,因此我们必须手动注册接收器。我在MainActivity的onCreate中完成了此操作。ncbr是一个类级变量。

final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
ncbr = new NetworkChangeBroadcastReciever();
this.registerReceiver(ncbr, intentFilter );

不要忘记注销是在你的活动的onDestroy 中

@Override
protected void onDestroy() {
super.onDestroy();
this.unregisterReceiver(ncbr);
}

如果你切换4g或wifi,这将在你的onRecieve中运行代码。现在的问题是接收器没有访问片段的权限。一个简单的方法是在你通过所有测试时播放你自己的活动。我们用下面的块来做,你班的其他部分不变。

// Check internet connection and accrding to state change the
// text of activity by calling method
if (networkInfo != null && networkInfo.isConnected()) {
Log.i("Myapp", "Connected!");
Intent myIntent = new Intent();
intent.setAction("MyApp.ConnectivityGained"); //change to any unique tag
context.sendBroadcast(intent);
}

现在我们需要设置我们的片段来监听这个事件。我把这个代码放在片段的onCreateView中。br是类级BroadcastReceiver

br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent i)
{
Log.i("MyApp", "Broadcast Received");
// your refresh code goes here
}
};
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(br, 
new IntentFilter("MyApp.ConnectivityGained")); //filter has to match whatever you picked in the other broadcast receiver

现在就像以前一样,当片段被销毁时,我们需要注销侦听器。

@Override
public void onDestroyView() {
super.onDestroyView();
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(br);
}

最新更新