android oreo的后台服务
如何在没有显示通知点的情况下在android Oreo中继续后台服务? 我使用通知继续我的后台服务,但我不想显示运行服务的通知。
如果你在这里的某个地方正确地阅读了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步:使用通知显示您的服务正在运行。 在
onCreate
方法Service
添加以下代码行。
@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上运行的所有设备上运行。
我确信即使应用程序处于后台或处于kill状态,此解决方案也能正常工作。
重要说明:显示在背景中运行服务的通知(背景或杀死状态的应用程序)在ANDROID OREO 8.0中是强制性的。 你不能用它跑 。 因此,我们建议您根据ANDROID所做的最佳实践,对您的应用程序进行必要的更改以使其正常工作。
我希望这可能有助于解决您的问题。
这个API version (26).
无法做到这一点API version (26).
如果您运行它,Android操作系统会自动关闭您的服务,而不会向用户显示通知。
如果您的目标是API >= 26
,系统会对您的服务施加限制,以便在后台运行,除非您的活动位于前台。 一旦您的活动进入后台,当系统发现它在后台运行时,服务将终止。
通过使用StartForegroundService()
方法,即使活动未运行,您也可以授予在后台运行服务的权限。 必须在创建服务后,服务必须在五秒钟内调用其startForeground()
方法。