[从stackoverflow和许多博客中,我当然可以理解,前台服务永远不会在没有API通知的情况下运行> 25。但是,我仍然混淆了当应用程序在屏幕上运行或可见时是通知指令。例如。用户站在应用程序内时无需通知。 这样可以在应用运行时删除通知吗?在服班级
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
......
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Notification.Builder builder = new Notification.Builder(this, ANDROID_CHANNEL_ID)
.setContentTitle(getString(R.string.app_name))
.setContentText(text)
.setAutoCancel(true);
Notification notification = builder.build();
startForeground(1, notification);
}
return START_NOT_STICKY;
}
活动中
Intent myService = new Intent(this, MyService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(myService);
} else {
startService(myService);
}
否,即使您的应用程序在前台运行,您的前台服务也需要通知。这是强制性的。
您将无法隐藏它。
为什么:您可以使用其他任何后台任务处理程序,例如意图服务,作业sclr,但前台服务设计为不同的东西,您的用户了解事件我将关闭,但它的进度之一将继续运行,但后台服务却有所不同,您知道会在后台执行某些操作,但是当系统决定最好的时间而不是在您的应用程序需要执行此操作时(例如在前台服务中)。
另外一个案例,例如:假设您的应用程序的前台电池电量低于用户或系统的预期,则无论如何您的前台服务都将立即执行,因此对于用户来说,了解其正在运行并占用我的资源(电池,数据等)非常重要。
希望您有我的意思mean
在前台服务运行时无法删除通知,但是可以将前台服务改回“常规”服务。这消除了通知的需要。实际上,要使用的功能,
stopForeground(boolean removeNotification)
...仅出于此目的包括一个stopForeground(boolean removeNotification)
参数。您可以通过交替调用removeNotification
和startForeground()
来根据需要从“前台”切换到“常规”。
[如果不清楚,您可能希望在至少有一个stopForeground()
处于“恢复”状态时呼叫stopForeground()
。这是您必须手动跟踪的事情。然后,当“已恢复”活动的数量达到0时,您将调用Activity
。