我正在开发带有Alarmmanager和服务的应用程序,在某些情况下无法取消通知。我正在使用片段。

我的应用程序每隔“ x”分钟发送两次通知。我有一个按钮可以启动服务,而另一个可以停止它。当我启动该服务时,将触发通知,并且当我按下“停止”按钮时,它可以正常工作。但是,当我启动该服务并退出该应用程序时,通知会正常触发,但是当我单击通知时,会打开该应用程序,然后按停止按钮,但通知永不停止,通知会继续被触发。

我在其中调用alarmanager.cancel(pendingintent)的函数在同一片段中。(MainFragment.class是第一个片段)。

MainFragment.class

    intent = new Intent(getContext(), TimeAlarm.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    intent.setAction(Long.toString(System.currentTimeMillis()));
    pendingIntent = PendingIntent.getBroadcast(mContext, 0,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() + 15000,
                15000,
                pendingIntent);

    intent2 = new Intent(getContext(), TimeAlarm2.class);
    intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    intent2.setAction(Long.toString(System.currentTimeMillis()));
    pendingIntent2 = PendingIntent.getBroadcast(getContext(), 1,
            intent2, PendingIntent.FLAG_UPDATE_CURRENT);

    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                        SystemClock.elapsedRealtime() + 15000,
                        15000,
                        pendingIntent2);


扩展BroadcastReceiver的TimeAlarm.class

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.icon)
                .setContentTitle("...")
                .setContentText("...");

 Intent resultIntent = new Intent(context, MainActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(resultPendingIntent);

        mBuilder.setAutoCancel(true);

        mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT;

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


扩展BroadcastReceiver的TimeAlarm2.class

NotificationCompat.Builder mBuilder2 = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.icon2)
                .setContentTitle("..")
                .setContentText("..");

        Intent resultIntent = new Intent(context, MainActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(1, PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder2.setContentIntent(resultPendingIntent);

        mBuilder2.setAutoCancel(true);

        mBuilder2.build().flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT;
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, mBuilder2.build());


谢谢,最好的问候!

最佳答案

从两个意图中删除这些行,然后重试。

intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
intent2.setAction(Long.toString(System.currentTimeMillis()));


它为我工作

07-24 09:45
查看更多