2015-01-05 26 views
0

我正在創建包含兩個按鈕(是/否)的自定義視圖的通知。點擊這些按鈕將啓動一個PendingIntent,然後將根據點擊按鈕繼續。 但是PendingIntent.getBroadcast()總是返回第一個Intent(這樣PendingIntent調用的BroadcastReceiver總是認爲第一個聲明的按鈕「no」被點擊),這可能是由於缺少標誌。PendingIntent.getBroadcast返回現有PendingIntent

如何解決這個問題?我需要另一臺BroadcastReceiver嗎?

// create notification with custom view and two buttons 
Intent buttonNoReceiver = new Intent(context, NotificationAfterReceiver.class); 
buttonNoReceiver.putExtra(AppUtil.EXTRAS_EVENT_ID, event.getEventID()); 
buttonNoReceiver.putExtra(EXTRAS_BUTTON, "no"); 
PendingIntent pendingNoIntent = PendingIntent.getBroadcast(context, event.getEventID(), buttonNoReceiver, 0); 
views.setOnClickPendingIntent(R.id.btn_no, pendingNoIntent); 

Intent buttonYesReceiver = new Intent(context, NotificationAfterReceiver.class); 
buttonYesReceiver.putExtra(AppUtil.EXTRAS_EVENT_ID, event.getEventID()); 
buttonYesReceiver.putExtra(EXTRAS_BUTTON, "yes"); 
PendingIntent pendingYesIntent = PendingIntent.getBroadcast(context, event.getEventID(), buttonYesReceiver, 0); 
views.setOnClickPendingIntent(R.id.btn_yes, pendingYesIntent); 

NotificationAfterReceiver

public class NotificationAfterReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String button = null; 

     Bundle extras = intent.getExtras(); 

     if (extras != null) { 
      button = extras.getString(NotificationUtil.EXTRAS_BUTTON); 
     } 

     if (button.equals("yes")) { 
      values.put(DatabaseHelper.KEY_EVENTS_FULFILLED, 1); 
      Log.i("NotificationAfterReceiver", "button yes"); 
     } else if (button.equals("no")) { 
      values.put(DatabaseHelper.KEY_EVENTS_FULFILLED, 0); 
      Log.i("NotificationAfterReceiver", "button no"); 
     } 
    } 
} 
+0

調用getBroadcast()時使用不同的'requestCode'() – pskink

+0

我應該使用哪些代碼?我想默認的是1,但這會導致同樣的問題。使用隨機數似乎不是一個很好的解決方案..? – Chris

+0

使用0表示「否」PendingIntent,使用1表示「是」PendingIntent – pskink

回答

0

我想補充一個合適的回答,用於製造PendingIntent唯一可能的解決方案,將使用當前的時間,如:

PendingIntent uniquePendingIntent = 
    PendingIntent.getBroadcast(context, (int) System.currentTimeMillis(), intent, 0);