在通知+ Android上单击“操作”按钮的方法

时间:2018-09-16 20:44:19

标签: android notifications android-notifications

我正在尝试通过操作按钮发出通知。单击此操作按钮后,通知消失,它调用将更新数据库的方法。我不想打开一个活动,只是在不打开应用程序的情况下调用方法。

我的问题是通知已正确启动,但操作按钮不起作用。另外,即使构建器具有.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)方法不起作用。

0 个答案:

没有答案