当前位置: 代码迷 >> Android >> BroadcastReceiver的动态注册与解除注册,苦不得解。
  详细解决方案

BroadcastReceiver的动态注册与解除注册,苦不得解。

热度:91   发布时间:2016-05-01 14:14:37.0
BroadcastReceiver的动态注册与解除注册,苦不得解。。。求助。。。
在Service派生类的onStart方法里构造BroadcastReceiver并注册,onDestroy方法里解除注册

Java code
public void onStart() {    MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();    IntentFilter inFilter = new IntentFilter();    inFilter.addAction(Intent.ACTION_TIME_TICK);    // 我百度了一下,说getApplicationContext得到的是整个应用程序的上下文    // 而Activity.this仅仅是该Activity的上下文,两者不同    // 那意思是不是说,广播接收注册给了哪个Context,就要由哪个Context来解除注册?    // BroadcastReceiver的onReceive函数有两个回调参数,Context和Intent    // 这个Context参数又是谁的上下文?感觉越来越晦涩了!    Context context = getApplicationContext();    context.registerReceiver(mReceiver, inFilter);}public void onDestroy() {    // unregisterReceiver接收一个BroadcastReceiver实例做参数,是不是要重新构造一个?    // 还是在注册和解除注册时都要传递同一个BroadcastReceiver实例?    MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();    Context context = getApplicationContext();    context.unregisterReceiver(mReceiver);}



我在做调试的时候,尝试停掉这个Service,结果报错Unable to stop service,究其缘由,仍未果。。。
我觉得问题可能出在BroadcastReceiver的unregisterReceiver上面,也就是说Context不对号?

这个Context好让人头疼啊!!

麻烦大侠指点一下,小弟谢了!

------解决方案--------------------
首先,广播的注册和解除应该是针对一个BroadcastReceiver对象而言,还有对于使用哪个Context没必要使用
getApplicationContext(),在那个组建中注册用那个Context即可,你可以试试。