紧急预警!Android 17 定位权限大改,你的 App 要适配了

0 阅读4分钟

本文首发于微信公众号“Android技术圈”

做过定位相关功能的开发者都知道,定位权限是用户最敏感的权限之一。

弹窗一出来,用户的第一反应往往是"拒绝"。就算选了"仅在使用时允许",心里也不踏实——我关了应用它还在定位我吗?

Android 17 给出了一个新思路:不弹窗了,改成按钮。

Image

系统定位按钮:点一下,用一次

Android 17 引入了一个全新的 UI 组件——系统定位按钮(Location Button)

它的逻辑很简单:开发者把这个按钮嵌入到应用界面里,用户需要定位的时候点一下,应用就能获得一次精确位置。不需要弹权限对话框,不需要提前授权。

Image

对开发者来说,好消息是这个按钮通过 Jetpack 库提供,不需要自己从头实现。而且它自带向下兼容——在 Android 16 及以下的设备上,会自动降级为标准的定位权限弹窗。

按钮长什么样

定位按钮有一定的自定义空间:

  • • 颜色、轮廓样式、大小、形状都可以调整,适配应用的 UI 风格

  • • 定位图标是固定的,不能替换——这是系统安全的一部分,防止应用伪造按钮欺骗用户

  • • 文字标签有预设选项可选

也就是说,你可以让按钮融入你的界面设计,但用户一眼就能认出这是一个"系统级"的定位按钮,而不是应用自己画的。

使用时需要声明 USE_LOCATION_BUTTON 权限。

Image

模糊定位也升级了

除了定位按钮,Android 17 还改进了**模糊定位(Coarse Location)**的算法。

之前的模糊定位用的是固定的 2km 网格——不管你在市中心还是荒郊野外,返回的都是一个 2km x 2km 范围内的模糊位置。

问题在哪?在人口稀疏的地方,2km 范围内可能只有几户人家,模糊定位约等于精确定位。这就是隐私保护的漏洞。

Image

Android 17 引入了基于人口密度的动态网格算法

  • • 人口密集区域(城市):网格较小,因为 2km 范围内已经有足够多的人

  • • 人口稀疏区域(郊区、乡村):自动增大网格范围,确保模糊位置覆盖足够多的用户

这个改动对开发者来说是透明的,不需要改代码。但如果你的应用依赖模糊定位的精度来做某些逻辑判断,需要注意在偏远地区返回的范围可能比以前更大。

谁在用我的位置?系统告诉你

Android 17 还加强了定位访问透明度

当非系统应用正在访问定位时,状态栏会显示一个持续的定位指示器。用户点击这个指示器,可以看到最近哪些应用访问了位置数据,并且直接管理权限。

这个"最近应用使用"对话框的设计很直接——不需要跳转到设置页面,在当前界面就能看到信息、关闭权限。

对开发者意味着什么?你的应用在后台偷偷获取位置的行为,用户一眼就能看到。 如果你的应用频繁获取位置但用户感知不到价值,很可能会被直接关掉权限。

权限对话框也变了

最后一个变化是定位权限的运行时对话框本身。

Android 17 重新设计了"精确定位"和"模糊定位"两个选项的视觉呈现,让两者的区分更加明显

之前的设计中,两个选项看起来太像了,很多用户不知道自己选的是哪个。新设计用更清晰的视觉分隔,引导用户做出更有意识的选择。

Image

写在最后

从 Android 6.0 引入运行时权限,到 Android 10 的后台定位限制,再到 Android 12 的模糊定位选项,Google 一直在收紧定位权限。

Android 17 的定位按钮是这条路上的又一步——从"能不能用"变成了"用的时候才给"。

对用户来说,这是好事。对开发者来说,与其抱怨权限越来越难拿,不如拥抱这个趋势:用定位按钮替代权限弹窗,让用户主动给你定位,而不是被动同意。

你的应用打算怎么接入定位按钮?评论区聊聊。