2011-12-21 74 views
1

開始從廣播接收器的活動我可以用這種方式調用從廣播接收器的活動:與結果

public class AlarmReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     try { 
      Intent i = new Intent(context, MyActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 

      Log.v(TAG, "alarm triggered"); 
     } catch (Exception e) { 
      Log.v(TAG, e.toString()); 
     } 
    } 
} 

這帶來的應用前端和活動要求onResume()。我的問題是我無法確定BroadcastReceiver是否將我帶到onResume(),或者只是用戶本身手動。有什麼方法可以確保BroadcastReceiver稱爲活動?

我還嘗試通過執行i.putExtra("foo", "bar")來使用Extras以BroadcastReceiver填充意向。我無法通過在Activity上調用MyActivity.getIntent().getExtras().get("foo")來讀出它。

希望有人能幫助我解決這個問題,非常感謝!

回答

2

你可以在你的意圖中發送額外的內容並檢查它們是否接收,但是正確的做法是爲「STARTED_BY_RECEIVER」設置一個布爾值;

開始活動時,將第三行放入onReceive回調方法中;

Intent i = new Intent(context, MyActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.putExtra("STARTED_BY_RECEIVER", true); 
context.startActivity(i); 

然後在活動的onCreate,你可以檢查這是否是由這樣的廣播接收機啓動;

if(getIntent().getExtras() != null && getIntent().getExtras().getBoolean("STARTED_BY_RECEIVER")){ 
    // The activity was started by the receiver 
} 
else{ 
    // The activity was started by user 

這工作,因爲GetBoolean方法將返回false時,有沒有額外的所謂「STARTED_BY_RECEIVER」,這樣你只需要把國旗在一個地方(由接收器啓動)

也不要忘了把「STARTED_BY_RECEIVER」放在一個靜態變量中,然後在兩個地方使用它!

+0

將「STARTED_BY_RECEIVER」放入一個靜態變量並在兩個地方使用它意味着什麼?由於看到沒有變量STARTED_BY_RECEIVER,我可以像正常的方式檢查像'STARTED_BY_RECEIVER == true;'這不適合我,我做了你所說的一切,但「靜態變量」的東西。 'if(getIntent()。getExtras()!= null && getIntent()。getExtras()。getBoolean(「STARTED_BY_RECEIVER」))'雖然我沒有'i.putExtra(「STARTED_BY_RECEIVER」,true)'in我的BroacastReceiver。 – arminb 2011-12-22 01:07:54

+0

好吧忘了靜態的東西..你把if()放在onCreate的右邊?如果它是從接收方調用的,它將是真的,所以if語句將運行,如果用戶調用,那麼其他語句將運行,因爲在那裏不會有額外的(「STARTED_BY_RECEIVER」)。現在,您需要儘可能徹底正如我在我的回答中告訴我什麼沒有工作,只是說「這不適合我」 – 2011-12-22 14:24:31

+0

在我的BroadcastReceiver的'onReceive()'方法中,我設置了'i.putExtra (「STARTED_BY_RECEIVER」,true);'在我通過context.startActivity(i)'開始活動之前。在我的Activity中,我將'if(getIntent()。getExtras()!= null && getIntent()。getExtras()。getBoolean(「STARTED_BY_RECEIVER」))'放入我的'onCreate()'方法中,但if子句永不放棄成真。 這就是我所做的,抱歉不適合,並感謝您的參與。 – arminb 2011-12-22 14:52:32

0

廣播接收機不能傳遞額外 http://developer.android.com/reference/android/content/BroadcastReceiver.html

你可以嘗試做反向不過,有開放活動的用戶動作傳遞一個布爾值設置爲true爲默認值,你可以檢查

boolean userStarted = getIntent().getExtras().getBoolean('userStarted', false); 
+0

但是我應該在哪裏設置userStarted?我需要一些可以確保用戶恢復活動而不是BroadcastReceiver的情況。反過來也是同樣的問題。 – arminb 2011-12-21 21:42:24