使用广播接收器重新启动Internet时刷新活动

时间:2017-11-02 00:08:24

标签: android broadcastreceiver

好的,我是初学者,并且在第一次接触广播接收器时,即使搜索量如此之多。对不起,我有一个项目要在几个小时内完成。如果有人能帮助我,我会非常感激。 我想这很简单。我只想部署一个功能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();
    }

1 个答案:

答案 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);
}