如何在Oreo及更高版本中在启动完成后启动前台服务?

4
我正在开发一款应用程序,希望在启动完成后启动前台服务。我知道不能在广播中启动服务,所以我提出这个问题。我没有找到有用的细节来继续下去。我正在使用一个前台服务,在每分钟更新位置信息。
为了监听启动,我使用Broadcast-Receiver。
在AndroidManifest.xml文件中,我已经写了以下内容。
<receiver
     android:name=".services.receiver.StartUpdateReceiver"
     android:enabled="true"
     android:exported="true"
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
     <intent-filter android:priority="1000">
         <action android:name="android.intent.action.BOOT_COMPLETED" />
     </intent-filter>
</receiver>

在接收引导接收器后,我希望每隔一分钟启动同样的前台服务以获取位置更新。当我在活动中点击按钮启动前台服务以获取位置更新时,一切正常。

请告诉我如何实现这一点?


请查看此文档 https://developer.android.com/about/versions/oreo/background#services - Rahul Chokshi
根据该文档: 后台服务限制:当应用程序处于空闲状态时,其使用后台服务的能力受到限制。这不适用于前台服务,前台服务对用户更加明显。这就是为什么我想使用前台服务的原因。 - Harish Kamboj
2个回答

3
使用startForegroundService()启动前台服务。

嗨,谢谢回复。那个方法确实起作用了,但是效果不如预期。我无法获取位置更新,因为你知道在Android O中也有位置更新限制,所以我该如何处理? - Harish Kamboj
@HarishKamboj:前台服务不应受影响:https://developer.android.com/about/versions/oreo/background-location-limits - CommonsWare

1
Android 8.0引入了新的方法startForegroundService()来启动前台服务。系统创建服务后,应用程序有五秒钟时间调用服务的startForeground()方法以显示新服务的用户可见通知。如果应用程序在时间限制内未调用startForeground(),系统将停止服务并宣布应用程序为ANR。如开发者网站所述查看此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接