2016-05-13 129 views
2

因此,我有广播接收器开机启动。我有一个使用广播接收器收集的信息的活动。我希望活动能够在每次调用广播接收器时更新其回收器视图,问题是活动没有参考广播接收器。有没有一种方法可以让我的活动监听广播并更新自身?活动收听广播接收器

我唯一能想到的就是让活动运行一个重复的任务,它会尝试用新信息更新自己。这对我来说似乎不是一个好的解决方案。

回答

2

最好的办法是注册BroadcastReceiver - 见documentation on this。在你的情况下,你想要Programmatically register a broadcast receiver,以便Activity类中的onReceive(Context context, Intent intent)。这样,您就可以根据需要更新Recyclerview。例如:

public void onCreate(Bundle savedInstanceState){ 
    ... 
    IntentFilter filter = new IntentFilter(); 
    //you may want to set whatever filters here... 
    //define the broadcast receiver 
    receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //here you can update the RecyclerView as you desire using intent's data 
    } 
    }; 
    //register the broadcast receiver 
    registerReceiver(receiver, filter); 
} 

我强烈建议您通过这个不错的BroadcastReceiver tutorial

享受。

0

注册为BOOT_COMPLETED动作的广播接收器与该活动无关,它是一个独立的组件。所以,是的,你没有参考你的活动,你不应该运行任何定期任务。

我会做的是将收集的数据写入数据库或共享首选项,然后在您的活动实际上在屏幕上时读取它。

如果您使用SQLite数据库,则可以使用ContentObserver来通知您的活动有关基础数据的更改。这对装载机很有效。

如果有共享偏好设置,您可以使用在您的活动中注册的OnSharedPreferenceChangeListener