2013-08-22 36 views
1

我试图从IntentService来启动它的活动发送广播接收广播,这是我如何注册接收器的活动:广播接收器不会IntentService

private BroadcastReceiver mInitializer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    .... 
    mInitializer = new InitializationReceiver(); 
    IntentFilter initializer = new IntentFilter(); 
    initializer.addAction(IntentConstants.Tasks.INITIALIZE); 
    initializer.addAction(IntentConstants.Initialization.INITIALIZE_IS_FIRST_START); 
    initializer.addAction("test"); 
    registerReceiver(mInitializer, initializer); 
    .... 
} 

private class InitializationReceiver extends BroadcastReceiver { 
    private InitializationReceiver() { 
     if(D) Log.d(TAG, "Instantiated InitializationReceiver"); 
    } 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(D) Log.d(TAG, "Received broadcast, intentAction: "+intent.getAction()); 
     if(intent.getAction().equals(IntentConstants.Tasks.INITIALIZE)) { 
      if(D) Log.d(TAG, "Received Initialize Intent"); 
     } 
     if(intent.getAction().equals(IntentConstants.Initialization.INITIALIZE_IS_FIRST_START)) { 
      if(D) Log.d(TAG, "Received First Start Intent"); 
     } 
    } 
} 

这是怎么我从IntentService发送广播:

if(D) Log.d(TAG, "Got here"); 
Intent testIntent = new Intent("test"); 
sendBroadcast(testIntent); 
  • 业务创建事业“来到这里”得到记录,
  • 的广播接收器在服务被创建之前被初始化并且
  • 当发送广播时活动是可见的。
  • 广播没有收到,导致“接收的广播......”从未登录

什么会导致这个问题?

回答

6

您的registerunregister您的接收器分别为onResume()onPause()。原因如果您只注册onCreate()并取消注册onPause(),则下次活动进入前台时,将不会再次调用onCreate(),然后它不会再次注册接收方。但onResume()总是在正在显示的活动上调用。

public void onResume() { 
    super.onResume(); 
    .... 
    registerReceiver(myBroadcastReceiver, intentFilter); 
} 

public void onPause() { 
    super.onPause(); 
    ... 
    unregisterReceiver(myBroadcastReceiver); 
} 
+0

你是对的,Facebook登录导致活动停止,然后在onStop我正在注销Receiver。之后,它不再注册。 –

+0

我很高兴它解决了你的问题。 :) –