1

Я искал около часа, чтобы найти какое-то решение, как отправлять дополнительные функции, когда пользователь нажимает кнопку в окне уведомлений, но все, что я нашел, не работает для меня.Android - уведомление putExtra issue

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

Я использовал setFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP), setAction («Действие»), PendingIntent.FLAG_UPDATE_CURRENT и комбинацию всех этих решений, но ни одна из них не работала.

Вот мой код:

Notification.Builder notiBuilder = new Notification.Builder(context); 
       notiBuilder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.logo)); 
       notiBuilder.setSmallIcon(R.drawable.logo); 
       notiBuilder.setContentTitle(context.getString(R.string.eventNitificationTitle)); 
       notiBuilder.setContentText(obj.getString("nazwa") + " " + obj.getString("data")); 

       Intent eventIntenet = new Intent(context, EventActivity.class); 
       eventIntenet.setAction("Action_"+id); 
       eventIntenet.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

       eventIntenet.putExtra("eventID", id); 

       PendingIntent pIntent = PendingIntent.getActivity(context, 0, eventIntenet, PendingIntent.FLAG_UPDATE_CURRENT); 

       eventIntenet = null; 

       notiBuilder.setContentIntent(pIntent); 

       pIntent = null; 

       NotificationManager notiManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
        notiManager.notify(Integer.parseInt(id), notiBuilder.build()); 
       } else { 
        notiManager.notify(Integer.parseInt(id), notiBuilder.getNotification()); 
       } 

И способ, чтобы получить мой Int:

this.eventID = getIntent().getIntExtra("eventID", -1); 

Everytime, когда я нажимаю на уведомление, я двигаюсь к деятельности, но getExtra возвращает -1.

+0

Попробуйте getIntent(). GetExtra(). GetInt («eventID») и удалите те, которые вы устанавливаете null в Intents по умолчанию, не устанавливайте его, пока не завершите уведомление. – Thilek

+0

Спасибо за ответ. Я сделал это, но все еще не работал. У меня есть еще один вопрос: установка значения переменной в значение null, когда она мне больше не нужна, - хорошая идея? –

ответ

0

Вы можете попробовать что-то вдоль этих линий:

   NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ChatService.this).setSmallIcon(R.drawable.app_icon) 
         .setContentTitle(senderName) 
         .setContentText("Notification Text Here"); 
       mBuilder.setAutoCancel(true); 

       Intent resultIntent = new Intent(MyService.this, TargetActivity.class); 
       resultIntent.putExtra("eventID", id); 

       TaskStackBuilder stackBuilder = TaskStackBuilder.create(MyService.this); 
       stackBuilder.addParentStack(TargetActivity.class); 
       stackBuilder.addNextIntent(resultIntent); 

       PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

       mBuilder.setContentIntent(resultPendingIntent); 

       NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
       mNotificationManager.notify(id, mBuilder.build()); 
+0

Я пробовал ваше решение, но все еще получаю -1 –

0

Если ваше приложение уже запущено, и ваш EventActivity уже на вершине стека, этот код:

this.eventID = getIntent().getIntExtra("eventID", -1); 

всегда будет использовать Intent, что EventActivity был начат с в первый раз.

Вы должны переопределить onNewIntent() и получить «лишний» из Intent, который передается в качестве аргумента этому методу.

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