2015-11-18 2 views
2

Мне нужно отобразить уведомление двумя кнопками. Для каждой кнопки необходимо выполнить разные операции. Для этого я написал следующий код, но когда я получаю несколько действий по удалению уведомления, не выполняется.Уведомление с несколькими кнопками

Random NOTIFICATION_ID = new Random(); 
int CANCELNOTIFICATIONID = NOTIFICATION_ID.nextInt(); 
// define sound URI, the sound to be played when there's a notification 
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
Log.i("******* Service6", "" + msg); 
// intent triggered, you can add other intent for other actions 
Intent intent = new Intent(GcmIntentService.this, LoginActivity.class); 
PendingIntent pIntent = PendingIntent.getActivity(GcmIntentService.this, 0, intent, 0); 


Intent deleteIntent = new Intent(GcmIntentService.this, DeleteArchiveLoopActivity.class); 
deleteIntent.putExtra(LoopMeConstants.EXTRA_DELETE_ARCHIVE_LOOPS, "Delete loops"); 
Trace.i(TAG, "Looptype Delete loop"); 
deleteIntent.putExtra("DELETE_ARCHIVE_LOOP_ID", loopId); 
deleteIntent.putExtra("NOTIFICATONID", CANCELNOTIFICATIONID); 
deleteIntent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
//   PendingIntent pDeleteIntent = PendingIntent.getActivity(this, 145623, deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Intent archiveIntent = new Intent(GcmIntentService.this, DeleteArchiveLoopActivity.class); 
Trace.i(TAG, "Looptype Archive loop"); 
archiveIntent.putExtra(LoopMeConstants.EXTRA_DELETE_ARCHIVE_LOOPS, "Archive loops"); 
archiveIntent.putExtra("DELETE_ARCHIVE_LOOP_ID", loopId); 
archiveIntent.putExtra("NOTIFICATONID", CANCELNOTIFICATIONID); 
archiveIntent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
//   PendingIntent pArchiveIntent = PendingIntent.getActivity(this, 145623, archiveIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 
notificationBuilder.setSmallIcon(R.drawable.ic_launcher); 
notificationBuilder.setContentTitle("Sample"); 
notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(mPushtext)); 
notificationBuilder.setContentText(mPushtext); 
notificationBuilder.setSound(soundUri); 
notificationBuilder.addAction(R.drawable.delete, "Delete", PendingIntent.getActivity(this, 145623, deleteIntent, PendingIntent.FLAG_ONE_SHOT)); 
notificationBuilder.addAction(R.drawable.archive, "Archive", PendingIntent.getActivity(this, 145623, archiveIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 
notificationBuilder.setAutoCancel(false); 

//   notificationBuilder.setContentIntent(pArchiveIntent); 
Log.i("GCMIntent Srevice5", "" + msg); 
notificationBuilder.setOngoing(true); 
mNotificationManager.notify(CANCELNOTIFICATIONID, notificationBuilder.build()); 

Как решить эту проблему.

+0

я думаю, что вы настраиваете Intent 2 раз в AddAction и ваше удаление намерение является перезапись вашим archiveintent –

+0

@ VishalGaur для разных действий нам нужно писать разные намерения. – Harish

+0

так работает «архив»? – 0X0nosugar

ответ

1

В приведенном ниже образом я решил его.

в намерениях я дал два differentactivities

Intent deleteIntent = new Intent(GcmIntentService.this, DeleteLoopActivity.class); 

Intent archiveIntent = new Intent(GcmIntentService.this, ArchiveLoopActivity.class); 

notificationBuilder.addAction(R.drawable.delete, "Delete", PendingIntent.getActivity(this, CANCELNOTIFICATIONID, deleteIntent, 0)); 
notificationBuilder.addAction(R.drawable.archive, "Archive", PendingIntent.getActivity(this, CANCELNOTIFICATIONID, archiveIntent, 0)); 

Приведенный выше код решает мою проблему Спасибо всем

1

Вы должны использовать различные requestCode в Pending intent

notificationBuilder.addAction(R.drawable.delete, "Delete", PendingIntent.getActivity(this, 1, deleteIntent, PendingIntent.FLAG_ONE_SHOT)); 
notificationBuilder.addAction(R.drawable.archive, "Archive", PendingIntent.getActivity(this, 2, archiveIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

Если я даю другой requestCode, он также не работает. Он работает только для одного уведомления. – Harish

+0

Попробуйте использовать произвольные коды запросов для разных уведомлений – nv95

Смежные вопросы