2013-01-15 212 views
5

我試圖通過通知和事件運行一個活動onCreate我想「重定向」。爲此,在Intent類中添加信息。一個重要的特性是生成通知的類通過服務來執行。我從getApplicationContext方法檢索android.app.Application類提供的方法。每當我撥打方法getExtras()正在返回null。我究竟做錯了什麼?Intent.getExtras()總是返回空

public class OXAppUpdateHandler { 

    private void addNotification(Context context, int iconID, 
      CharSequence tickerText, CharSequence title, CharSequence content) { 

     CharSequence notificationTicket = tickerText; 
     CharSequence notificationTitle = title; 
     CharSequence notificationContent = content; 

     long when = System.currentTimeMillis(); 

     Intent intent = new Intent(context, MainActivity_.class); 
     intent.setFlags(
      Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY, 1); 

     PendingIntent pendingIntent = 
      PendingIntent.getActivity(context, 0, intent, 0); 

     NotificationManager notificationManager = 
      (NotificationManager) context.getSystemService(
       Context.NOTIFICATION_SERVICE); 
     Notification notification = 
      new Notification(iconID, notificationTicket, when); 
     notification.setLatestEventInfo(context, notificationTitle, 
             notificationContent, pendingIntent); 
     notificationManager.notify(NOTIFICATION_ID, notification); 
    } 

    public static boolean isUpdateStart(Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     boolean result = bundle != null && 
         bundle.containsKey(OPEN_UPDATE_ACTIVITY_KEY); 
     if (result) { 
      bundle.remove(OPEN_UPDATE_ACTIVITY_KEY); 
     } 
     return result; 
     } 
    } 

    @EActivity(R.layout.activity_main) 
    public class MainActivity extends Activity { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      if (OXAppUpdateHandler.isUpdateStart(getIntent())) { 
       startActivity(new Intent(this, UpdateActivity_.class)); 
      } 
     } 
    } 
+0

你可以發佈代碼,意圖額外的? –

+0

嘗試獲取基本上下文我.e進入通知廣播或其他地方。 –

+0

@ChangdeoJadhav方法OXAppUpdateHandler。 addNotification(...)通過代碼intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY,1); – adrianosepe

回答

20

我要探出窗口和猜測,你的問題就在這裏:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

您正在通過intentgetActivity(),並期待您將收到與您的Intent匹配的PendingIntent,幷包含您的附加內容。不幸的是,如果已經有一個PendingIntent漂浮在你的Intent匹配(沒有考慮到您的Intent演員)系統則getActivity()將返回你PendingIntent代替。

要看看這是問題,試試這個:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 
        PendingIntent.FLAG_UPDATE_CURRENT); 

這是說,如果已經有一個PendingIntentIntent在它應該在的那些取代額外的系統某處符合您intent參數。

+0

這對我有效! 我還包括下面的代碼,因爲活動並不總是重建: '@EActivity(R.layout.activity_main) 公共類MainActivity擴展OXBaseActivity { \t ... \t @覆蓋 \t保護無效onNewIntent(意圖) \t { \t \t超。onNewIntent(意向); \t \t \t 如果\t(OXAppUpdateHandler.isUpdateStart(意圖)) \t \t { \t \t \t startActivity(新意圖(此,UpdateActivity_.class)); \t \t} \t} }' – adrianosepe

+1

活動並不總是重建,因爲你已經同時設置'Intent.FLAG_ACTIVITY_CLEAR_TOP'和'Intent.FLAG_ACTIVITY_SINGLE_TOP'。如果您想要始終重新創建活動,請從您傳遞給'getActivity()'的'Intent'中移除'Intent.FLAG_ACTIVITY_SINGLE_TOP'。 –

+0

它工作。我傳遞0而不是PendingIntent.FLAG_UPDATE_CURRENT。非常感謝。 –

-1

(1)檢查here以確保您使用的認沽/正確獲得額外因爲我沒有看到你所添加數據的意圖的代碼。 (2)看起來你沒有調用get intent並獲得額外的結果,結果,實際上並沒有從bundle中獲取任何東西(假設信息存在)。如果您正在檢查一個布爾值,你應該讓你在包中放置數據如下:

Bundle bundle = getIntent().getExtras(); 

if (bundle.getBooleanExtra("WHATEVER"){ 
    //whatever you want to do in here 
} 
+0

我在 '... intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY,1)添加信息;' 然後恢復 '捆綁捆= intent.getExtras(); 布爾結果=捆綁! = null && bundle.containsKey(OPEN_UPDATE_ACTIVITY_KEY);' – adrianosepe

+0

但是你沒有得到額外的正確。 。 。你嘗試了我建議的方式嗎? – Rarw

+0

在我的情況下,當我調用getIntent()。GetExtras()返回null – adrianosepe