我有一个具有前端通知的前台服务的警报应用程序,该通知有两个操作,其中一个向服务发送意图并可以根据应用程序配置打开活动。
问题是,当我点击将意图发送到服务的操作时,通知不会隐藏。 当intent打开Activity时,似乎不会发生这种情况
我不想要没有通知的前台服务,我只是希望它在将意图发送到服务时将其隐藏回通知抽屉
这是代码:
NotificationCompat.Builder(mAlarmApplication, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notification_alarm) .setAutoCancel(false) .setOngoing(true) .setVibrate(LongArray(0)) .setContentTitle("Title") .setContentText("Content") .addAction(0, dismissActionText, dismissPendingIntent) .setCategory(NotificationCompat.CATEGORY_ALARM) .setPriority(NotificationCompat.PRIORITY_MAX) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentIntent(alarmScreenPendingIntent) .setFullScreenIntent(alarmScreenPendingIntent, true)
以下是应用https://play.google.com/store/apps/details?id=com.garageapp.alarmchallenges的链接。
警报启动时出现问题,我当前的解决方案是更新旧的抬头通知,使用一个新的抬头通知,但是UX不是很好,因为在Android 8+上通知新通知会popup老化
似乎您的Notification与您的Service绑定。 如果是这样,那么你必须在Service终止通知
你试过了吗?
public static void cancelNotification(Context ctx, int notifyId) { String ns = Context.NOTIFICATION_SERVICE; NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns); nMgr.cancel(notifyId); }
您正在使用.setOngoing(true) ,在服务正在运行时不应将其删除。
.setAutoCancel(true)也不能使用.setOngoing(true) 。
您必须使用.setOngoing(false)来关闭通知。
如果您或用户删除了您的前台通知,您的服务将转到后台,我认为最好的办法是不将前置通知设置为前景而不将其优先级设置为MAX
同时使用两个通知,一个在抽屉中,另一个在抬头:
– 优先级为DEFAULT的第一个通知,用于启动前台(自动取消设置为false,正在设置为true)显示这个带有startForground()
– 第二个通知(Heads up(Priority MAX)自动取消设置为true并且设置为false)您的操作通过notifyManager.notify()
这两个通知必须具有不同的ID
另一种方案:
如果您想使用一个抬头通知和前台服务操作,您可以这样做:
当用户点击此操作必须调用前台服务的操作时,使用带有前台服务操作按钮的抬头通知,然后前台服务可以使用优先级设置为默认值的新通知调用startForeground(具有相同ID),如果您的通知无法更新您可能需要先调用stopForeground(true)或notificationManager.cancel(id)然后startForeground使用新通知调用startForeground 。 这两个通知都应该设置为true并且auto cancel设置为false
在我看来,第一个解决方案比第二个更好,因为通知可能不会在第二个解决方案中更新。
正如文件所说:
启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统将其视为用户主动了解的内容…
android系统不允许您在没有通知或隐藏通知的情况下拥有前台服务。 这是因为用户意识到他/她的系统中正在发生的事情。
杀死通知也将停止您的前台服务。 所以你永远不能拥有这两个选项(前台服务和隐藏通知)
一个不明确的问题解决方案:
当您调用将意图发送到服务的操作时,使用调解器活动执行此操作我的意思是首先打开一个活动,然后在活动中向服务发送意图。
我希望这可以解决你的问题:
问题是,当我点击将意图发送到服务的操作时,通知不会隐藏。 当intent打开Activity时,似乎不会发生这种情况