我有一个服务,它创建正在进行的通知,如下所示。我需要创建此通知的唯一原因是,我希望在应用程序关闭时保持服务运行。
我不想在通知中显示任何内容。但每次创建此通知时,它都会向用户显示空白弹出窗口,这很烦人,而且它不会消失很长时间。我该如何避免这种情况?
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);
notificationBuilder只是一个创建通知弹出窗口的对象。
如果您想实现一种让用户取消通知的方式,请应用该选项。
SetOngoing (false)
如果你想添加一些文本
setContentTitle(messageTitle)
setContentText(messageBody)
如果你根本不想有任何通知,你可以删除所有的NotificationCompat代码。它与服务无关。
根据Android文档,在使用Foreground Service时,状态栏必须有一个不可撤销的通知,即使你试图通过设置最低优先级来隐藏通知,它也会用默认行为替换它。有关详细信息,请参阅"在前台运行服务"。
一项持久的服务可能会占用大量系统资源并降低设备速度,因此Android设置了限制以避免滥用,但它也为合理的后台作业提供了几种方法,其中之一是WorkManager的PeriodicWorkRequest,它可以在关闭应用程序的情况下运行,并且在条件满足时,甚至在设备重新启动时,也可以恢复运行。但它也有一些限制,比如:最长运行时间10分钟,最短重复间隔15分钟。
要使用WorkManager,您需要首先创建Worker类,例如CalculatorWorker,然后为其构建每20分钟运行一次的workrequet:
PeriodicWorkRequest taxWorkRequest = PeriodicWorkRequest.Builder.From<CalculatorWorker>(TimeSpan.FromMinutes(20)).Build();
交给系统:
WorkManager.Instance.Enqueue(taxWorkRequest);