问题描述
本文档中的第一点表示,如果应用在前台启动 Android 11 时启动前台位置服务,则需要后台位置权限。
https://developer.android.com/guide/components/foreground-services#bg-access-restrictions
我的用例是用户点击按钮开始位置跟踪。点击该按钮会启动一个前台服务,该服务会发出通知。现在,我希望应用程序即使在后台运行后也能继续跟踪。 在 Android 10 之前,完成此操作不需要后台位置权限。
我的问题是,要支持 Android 11,我是否还需要开始请求后台权限?另外,我需要为 Android 10 做同样的事情吗?没有在互联网上找到任何其他参考资料来验证这一点。请让我知道您的想法。
谢谢!
解决方法
根据the definition of background work
只要满足以下每个条件,应用就会被视为在后台运行:
- 用户当前无法看到该应用的所有活动。
- 应用没有运行任何在用户可见应用活动时启动的前台服务。
否则,该应用将被视为在前台运行。
在您的情况下,您符合第二点,当用户可以看到活动时启动前台服务,因此从技术上讲,即使用户显示服务通知,您的应用仍被视为处于前台离开您的应用。
如果您的目标是 Android 10 及更高版本,前台服务需要在其清单声明中包含 android:foregroundServiceType="location"
。见here。
如果您在创建的前台服务中获取位置更新,则不一定需要 ACCESS_BACKGROUND_LOCATION
权限,因为您在后台访问位置的技术并不严格。但是,在您的服务中,如果您使用任何可能需要后台位置权限的 API(例如地理围栏),那么您将需要将后台权限添加到清单中,并相应地请求和处理权限。