安卓奥利奥的后台服务

如何在Android Oreo中继续后台服务而不显示通知点?我继续使用通知的后台服务,但我不想显示正在运行的服务的通知。


答案 1

如果您已经在这里的某个地方正确阅读了Android Oreo 8.0文档,那么您可能没有在这里发布这个问题。

第 1 步:确保将服务作为前台启动,如下面的代码所示Service

ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), GpsServices.class));
ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), BluetoothService.class));
ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), BackgroundApiService.class));

第 2 步:使用通知显示服务正在运行。在 的方法中添加以下代码行。onCreateService

@Override
public void onCreate() {
    ...
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        startForeground(NOTIFICATION_ID, notification);
    }
    ...
}

第 3 步:删除 服务停止或销毁时。notification

@Override
public void onDestroy() {
    ...
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
          stopForeground(true); //true will remove notification
    }
    ...
}

此解决方案的一个问题是,它将继续显示,直到您在Android Oreo 8.0上运行的所有设备上运行为止。notificationService

我相信即使应用程序处于后台或处于终止状态,此解决方案也可以正常工作。

重要提示:在 ANDROID OREO 8.0 中,必须显示有关在后台运行服务(应用处于后台或已终止状态)的通知。你不能带着它逃跑。因此,建议您在应用程序中进行必要的更改,以使其按照ANDROID遵循或要求的最佳实践正常工作。

我希望这可能有助于解决您的问题。


答案 2

这在这次和更高的地方是不可能的。如果您运行服务而不向用户显示通知,Android 操作系统会自动关闭该服务。API version (26)

如果以系统为目标,则系统将限制服务在后台运行,除非您的活动在前台运行。只要您的活动进入后台,当系统发现服务在后台运行时,该服务将立即终止(请参阅后台服务限制)。API >= 26

通过使用方法,可以授予该权限以在后台运行服务,即使活动未运行也是如此。还必须在创建服务后,服务必须在五秒内调用其方法。startForegroundService()startForeground()


推荐