Android Q - 前台服务需要后台位置权限?

问题描述

本文档中的第一点表示,如果应用在前台启动 Android 11 时启动前台位置服务,则需要后台位置权限。

https://developer.android.com/guide/components/foreground-services#bg-access-restrictions

我的用例是用户点击按钮开始位置跟踪。点击该按钮会启动一个前台服务,该服务会发出通知。现在,我希望应用程序即使在后台运行后也能继续跟踪。 在 Android 10 之前,完成此操作不需要后台位置权限。

我的问题是,要支持 Android 11,我是否还需要开始请求后台权限?另外,我需要为 Android 10 做同样的事情吗?没有在互联网上找到任何其他参考资料来验证这一点。请让我知道您的想法。

谢谢!

解决方法

根据the definition of background work

只要满足以下每个条件,应用就会被视为在后台运行:

  1. 用户当前无法看到该应用的所有活动。
  2. 应用没有运行任何在用户可见应用活动时启动的前台服务。

否则,该应用将被视为在前台运行。

在您的情况下,您符合第二点,当用户可以看到活动时启动前台服务,因此从技术上讲,即使用户显示服务通知,您的应用仍被视为处于前台离开您的应用。

如果您的目标是 Android 10 及更高版本,前台服务需要在其清单声明中包含 android:foregroundServiceType="location"。见here

如果您在创建的前台服务中获取位置更新,则不一定需要 ACCESS_BACKGROUND_LOCATION 权限,因为您在后台访问位置的技术并不严格。但是,在您的服务中,如果您使用任何可能需要后台位置权限的 API(例如地理围栏),那么您将需要将后台权限添加到清单中,并相应地请求和处理权限。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...