android oreo 的后台服务

新手上路,请多包涵

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

原文由 faiyaz meghreji 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 437
2 个回答

如果您在 此处 的某处正确阅读了 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 步: 使用通知显示您的服务正在运行。在 --- 的 Service onCreate 方法中添加以下代码行。

 @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
    }
    ...
}

这个解决方案的一个问题是它会一直显示 notification 直到你的 Service 在运行 Android Oreo 8.0 的所有设备上运行。

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

重要说明: 在 ANDROID OREO 8.0 中,必须显示在后台运行服务的通知(应用程序处于后台或终止状态)。你 不能逃避 它。因此, 建议 您根据 Android 遵循或要求的 最佳 做法对您的应用程序进行必要的更改,以使其正常运行。

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

原文由 Amrut Bidri 发布,翻译遵循 CC BY-SA 4.0 许可协议

这在 API version (26) 及更高版本中是不可能的。如果您在未向用户显示通知的情况下运行 Android 操作系统,它会自动关闭您的服务。

如果您的目标是 API >= 26 系统将限制您的服务在后台运行,除非您在前台进行活动。一旦您的活动进入后台,当系统发现它在后台运行时服务将终止(请参阅 后台服务限制)。

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

原文由 Abdur Rahman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题