为何部分应用无需ACCESS_BACKGROUND_LOCATION也能后台甚至被杀时定位?
关于运动类应用无需后台位置权限即可后台追踪位置的解释
- 从Android 10开始,系统对带位置类型的前台服务设置了专门的权限豁免规则:只要应用获取了用户授予的「仅在使用该应用时允许」位置权限(对应
ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION权限),且启动的前台服务明确声明了foregroundServiceType="location"属性,同时运行期间持续在通知栏展示可见的前台服务通知,那么应用即使退到后台,也可以正常获取位置信息,无需额外申请ACCESS_BACKGROUND_LOCATION权限。 - 这类场景下系统的判定逻辑做了特殊调整:用户主动启动位置相关的前台服务,就视为用户明确许可应用在服务运行期间持续获取位置,哪怕应用界面不在前台,也不会被判定为需要后台权限的「后台位置访问」场景。
- 你提到的运动类应用正是用了这个规则:用户点击开始运动记录时,应用就会启动符合要求的位置前台服务,通知栏会持续展示运动进度相关的通知,完全满足豁免条件,自然不需要申请后台位置权限,权限设置页也不会出现「始终允许」选项。
- 应用被杀死后仍能运行的原因是前台服务本身的高优先级特性:系统默认不会轻易查杀正在运行的前台服务,就算进程被意外终止,符合规则的前台服务也会被系统自动拉恢复运行,这和位置权限的规则无关。
- 补充限制:该豁免仅适用于前台服务运行期间,服务停止后如果应用在后台需要获取位置,仍然需要申请
ACCESS_BACKGROUND_LOCATION权限;Android 12及以上版本使用位置类型前台服务,还需要额外声明普通权限FOREGROUND_SERVICE_LOCATION,该权限安装时自动授予,无需用户手动同意。
内容的提问来源于stack exchange,提问作者user13641224
相关产品推荐
相关产品推荐

