2013-08-22 75 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

我很高興它解決了你的問題。 :) –