1

Я пытаюсь что-то сделать, когда пользователь нажимает кнопку действия в уведомлении. Уведомления отображаются с действующей кнопкой. Но по какой-то причине действие не стреляет; приемник не получает сообщение. Фактически, ни один получатель не получает намерения - WakefulBroadcastReceiver (для оповещений), BootReceiver (для установки предупреждения при загрузке).Сделайте addAction работу для уведомления android

код ниже:

public class OSService extends IntentService { 

     // Call this method from onHandleIntent 
     private void createNotification(OrderSearch search) 
      { 
       String name = search.getName(); 
       NumberFormat df = NumberFormat.getIntegerInstance(); 
       Context context = getApplicationContext(); 

       Intent intent = new Intent("snooze"); 
       PendingIntent snoozer = PendingIntent.getBroadcast(context, 12345, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

       NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
         .setSmallIcon(R.drawable.ic_stat_notify) 
         .setContentTitle(df.format(search.getOrderCount()) + " orders") 
         .setAutoCancel(true) 
         .setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notify2)) 
         .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS) 
         .addAction(R.drawable.ic_alarm_off_black_18dp, "for today", snoozer) 
         .setContentText(name); 


       NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
       manager.notify(1, builder.build()); 
      } 
} 

В файле манифеста:

<application ...> 
    <receiver a:name=".ActionReceiver"/> 
</application> 

Приемник действия:

public class ActionReceiver extends BroadcastReceiver 
    { 
     public void onReceive(Context context, Intent intent) 
      { 
       Log.i(getClass().getSimpleName(), "Action: " + intent.getAction()); 
      } 
    } 

Я стучал головой о стену для несколько дней и не вижу, что случилось.

ответ

0

Ваш Intent предназначен для действия "snooze". Ваш <receiver> не имеет <intent-filter>, не говоря уже о одном для "snooze". Если вы намерены вызвать ActionReceiver для Notification действия, заменить:

Intent intent = new Intent("snooze"); 

с:

Intent intent = new Intent(context, ActionReceiver.class); 
+0

Это работает точно так же, как нужно! Причина отсутствия <намерения-фильтра> заключается в том, что я хочу использовать статические конечные поля. Но не строить Намерение так ... ну, заставляет меня чувствовать себя глупо. Спасибо, что указали на недосмотр. – Daniil

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