0

我有一项服务可以创建如下的持续通知。我需要创建此通知的唯一原因是因为我想在应用程序关闭时保持服务运行。

我不想在通知中显示任何内容。但是每次创建此通知时,它都会向用户显示空白弹出窗口,这很烦人,而且很长一段时间都不会消失。我怎样才能避免这种情况?

var _notificationBuilder = new NotificationCompat.Builder(this, channelId)
   .SetSmallIcon(Resource.Mipmap.icon)
   .SetPriority((int)Android.App.NotificationPriority.Min)
   .SetOnlyAlertOnce(true)
   .SetOngoing(true);

var notification = _notificationBuilder.Build();
StartForeground(SERVICE_RUNNING_NOTIFICATION_ID, notification);
4

2 回答 2

0

根据Android doc,使用前台服务时,状态栏的不可关闭通知是必须的,即使您尝试通过设置最小优先级来隐藏通知,它也会将其替换为默认行为。有关详细信息,请参阅'<a href="https://developer.android.com/guide/components/services.html#Foreground" rel="nofollow noreferrer">在前台运行服务'。

一个持久化的服务会占用大量系统资源并降低设备速度,因此 Android 设置了限制以避免滥用,但它也提供了几种合理的后台作业方式,其中之一是WorkManagerPeriodicWorkRequest,它可以在应用程序关闭的情况下运行,并且即使您的设备重新启动,也可以在满足条件时恢复使用。但它有一些限制,例如:最大运行时间 10 分钟,最小重复间隔 15 分钟。

要使用 WorkManager,您需要先创建 Worker 类,例如 CalculatorWorker,然后构建 workrequet 以每 20 分钟运行一次:

PeriodicWorkRequest taxWorkRequest = PeriodicWorkRequest.Builder.From<CalculatorWorker>(TimeSpan.FromMinutes(20)).Build();

交给系统:

WorkManager.Instance.Enqueue(taxWorkRequest);
于 2020-02-21T07:22:48.437 回答
0

notificationBuilder 只是一个创建通知弹出窗口的对象。

如果您想为用户实现一种关闭通知的方式,请应用该选项。

SetOngoing (false)

如果你想添加一些文字

setContentTitle(messageTitle)
setContentText(messageBody)

如果您根本不想收到任何通知,可以删除所有 NotificationCompat 代码。它与服务无关。

于 2020-02-21T02:26:55.743 回答