android隐藏前台服务通知,在点击通知操作上隐藏Foreground Service的通知

本文讨论了如何在Android应用中处理前台服务通知,特别是在用户点击发送到服务的操作时如何隐藏通知。提出了两种解决方案:1) 使用不同ID的通知,一个用于前台服务,一个用于头部通知;2) 通过打开一个中介活动来发送意图,以避免通知不消失的问题。同时强调Android系统要求前台服务必须有可见通知,并且不能仅使用隐藏通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个具有前端通知的前台服务的警报应用程序,该通知有两个操作,其中一个向服务发送意图并可以根据应用程序配置打开活动。

问题是,当我点击将意图发送到服务的操作时,通知不会隐藏。 当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时,似乎不会发生这种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值