2016-04-05 4 views
0

Я создал уведомление с действиями. И для обработки с уведомлением я пользуюсь сервисом. Для каждого действия я создал ожидающее намерения с некоторыми дополнительными. Но в службе, когда я пытался получить дополнительные для намерения, я получил неправильное значение этого. Вот мой код:один сервис за несколько действий по уведомлению

класс NotificationCreator

public Notification createConnectedNotification(){ 
    Context context = TeamlabApplication.getInstance().getApplicationContext(); 
    CharSequence comeToWork = context.getString(R.string.toWork); 
    CharSequence goFromDinner = context.getString(R.string.fromDinner); 


    PendingIntent actionComeIntent = createActionSendPendingIntent(context, comeToWork.toString()); 
    Notification.Action.Builder sendMessageToWork = 
      new Notification.Action.Builder(R.mipmap.icon_notification_action_send, comeToWork, actionComeIntent); 

    PendingIntent actionDinnerIntent = createActionSendPendingIntent(context, goFromDinner.toString()); 
    Notification.Action.Builder sendMessageFromDinner = 
      new Notification.Action.Builder(R.mipmap.icon_notification_action_send, goFromDinner, actionDinnerIntent); 

    PendingIntent activityIntent = createActivityPendingIntent(context); 

    Notification.Builder builder = new Notification.Builder(context) 
      .setSmallIcon(R.mipmap.icon_notification_main) 
      .setContentTitle("Connected to WI-FI") 
      .setContentText("You connected to work WI-FI. Do you want to send message in teamLab") 
      .setContentIntent(activityIntent) 
      .setLights(Color.WHITE, 1000, 1000) 
      .setAutoCancel(true) 
      .addAction(sendMessageToWork.build()) 
      .addAction(sendMessageFromDinner.build()); 

    return builder.build(); 
} 



private PendingIntent createActionSendPendingIntent(Context context, String extraMessage){ 
    Intent intent = new Intent(context, NotificationService.class); 
    intent.putExtra(NotificationService.MESSAGE_EXTRA, extraMessage); 
    return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
} 

класс NotficationService

public int onStartCommand(Intent intent, int flags, int startId) { 
     if (intent != null) { 
      AppLog.d("Extra is: " + intent.getStringExtra(MESSAGE_EXTRA)); 
     } 

String toWork = "To work" , goFromDinner = "From dinner". В уведомлении я нажал acton со String goFromDinner, но в Extra i есть результат To work. Как это исправить?

ответ

0

Я нашел решение. Вам нужно установить разные requestCode для разных действий. Итак, теперь мой код:

private PendingIntent createActionSendPendingIntent(int requestCode, Context context, String extraMessage){ 
    Intent intent = new Intent(context, NotificationService.class); 
    intent.putExtra(NotificationService.MESSAGE_EXTRA, extraMessage); 
    return PendingIntent.getService(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
} 
Смежные вопросы