好的,我是初学者,并且在第一次接触广播接收器时,即使搜索量如此之多。对不起,我有一个项目要在几个小时内完成。如果有人能帮助我,我会非常感激。 我想这很简单。我只想部署一个功能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");
}
}
我认为问题是nowPlayingMoviesFragment(类)收到的时候:
在那里插入什么? ResumeBroadcastReceiver = new ResumeBroadcastReceiver()?我也不知道在意图过滤器中放什么。
Bellow是一个私人课程,现在正在播放电影片段
私有类ResumeBroadcastReceiver扩展BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
checkNetwork();
}
答案 0 :(得分:0)
你可以通过几种不同的方式做到这一点。 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);
}