Вызов метода, нажав кнопку «Действие» в уведомлении + Android - PullRequest
0 голосов
/ 16 сентября 2018

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

Моя проблема в том, что уведомление запускается правильно, но кнопка действия не работает.Кроме того, при нажатии на уведомление оно не исчезает, даже если у разработчика есть метод .setAutoCancel (true).

Уведомление выглядит следующим образом: enter image description here

Но при нажатии кнопки или уведомления ничего не происходит.Этот код активирует уведомление:

 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) не работает.

...