自定義通知欄多個按鈕使用相同`PendingIntent`或請求碼(requestCode)相同,導致系統認為是同一個Intent,後創建的覆蓋先創建的,最終所有按鈕觸發同一個動作。
// 錯誤示例:所有按鈕requestCode均為0
PendingIntent.getActivity(context, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent.getActivity(context, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT); // 覆蓋前者
// 正確示例:每個按鈕分配唯一requestCode
int REQUEST_CODE_BTN1 = 1001;
int REQUEST_CODE_BTN2 = 1002;
int REQUEST_CODE_BTN3 = 1003;
PendingIntent pi1 = PendingIntent.getActivity(context, REQUEST_CODE_BTN1, intent1, PendingIntent.FLAG_IMMUTABLE);
PendingIntent pi2 = PendingIntent.getActivity(context, REQUEST_CODE_BTN2, intent2, PendingIntent.FLAG_IMMUTABLE);
PendingIntent pi3 = PendingIntent.getActivity(context, REQUEST_CODE_BTN3, intent3, PendingIntent.FLAG_IMMUTABLE);
// 綁定到RemoteViews
RemoteViews views = new RemoteViews(getPackageName(), R.layout.custom_notification);
views.setOnClickPendingIntent(R.id.btn_action1, pi1);
views.setOnClickPendingIntent(R.id.btn_action2, pi2);
views.setOnClickPendingIntent(R.id.btn_action3, pi3);
| 類型 | 創建方式 | requestCode作用域 |
|---|---|---|
| Notification.Action | `new Notification.Action.Builder(icon, title, pendingIntent).build()` | 全局唯一(同一Notification內) |
| RemoteViews自定義按鈕 | `views.setOnClickPendingIntent(viewId, pendingIntent)` | 全局唯一(整個App範圍) |