Я пытаюсь сделать уведомление с помощью кнопки действий.При нажатии этой кнопки действия уведомление исчезает, и он вызывает метод, который обновит базу данных.Я не хочу открывать действие, просто вызвать метод без открытия приложения.
Моя проблема в том, что уведомление запускается правильно, но кнопка действия не работает.Кроме того, при нажатии на уведомление оно не исчезает, даже если у разработчика есть метод .setAutoCancel (true).
Уведомление выглядит следующим образом:
Но при нажатии кнопки или уведомления ничего не происходит.Этот код активирует уведомление:
public void triggerNotification(Context context, String t) {
c = Controlador.getMyController();
idAlarma = c.getIdAlarma();
Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
long[] pattern = new long[]{2000, 1000, 2000};
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
Intent action1Intent = new Intent(context, NotificationActionService.class)
.setAction(ACTION_1);
PendingIntent action1PendingIntent = PendingIntent.getService(context, 0,
action1Intent, PendingIntent.FLAG_ONE_SHOT);
builder
.setContentTitle("Tienes una toma pendiente")
.setContentText(t)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher_background))
.setSmallIcon(R.mipmap.ic_launcher_round)
.setAutoCancel(true) //Cuando se pulsa la notificación ésta desaparece
.setSound(defaultSound)
.setVibrate(pattern)
.addAction(new NotificationCompat.Action(R.mipmap.ic_launcher_round, "Me he tomado la pastilla", action1PendingIntent));
Notification notificacion = new NotificationCompat.BigTextStyle(builder)
.bigText(t)
.setBigContentTitle("Tienes Una Toma Pendiente")
.build();
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(idAlarma, notificacion);
}
Класс NotificationActionService является внутренним классом, который выглядит следующим образом:
public static class NotificationActionService extends IntentService {
public NotificationActionService() { super("NotificationActionService"); }
@Override
protected void onHandleIntent(Intent intent) {
Log.d("IntentService","Hello World");
Toast.makeText(getApplicationContext(), "Service running", Toast.LENGTH_SHORT).show();
}
}
Этот код не отображает ни сообщение Toast, нисообщение logcat.
PD: Прежде чем сказать, что это дубликат, я хотел бы добавить, что я пробовал много решений, и мой код очень похож на поток THIS .Несмотря на это, это решение не сработало в моем приложении, поэтому я пытаюсь понять, почему оно не работает.
Я также хотел бы понять, почему метод setAutoCancel (true) не работает.