本文首发于微信公众号"Android技术圈"
做过定位相关功能的开发者都知道,定位权限是用户最敏感的权限之一。
弹窗一出来,用户的第一反应往往是"拒绝"。就算选了"仅在使用时允许",心里也不踏实------我关了应用它还在定位我吗?
Android 17 给出了一个新思路:不弹窗了,改成按钮。

系统定位按钮:点一下,用一次
Android 17 引入了一个全新的 UI 组件------系统定位按钮(Location Button)。
它的逻辑很简单:开发者把这个按钮嵌入到应用界面里,用户需要定位的时候点一下,应用就能获得一次精确位置。不需要弹权限对话框,不需要提前授权。

对开发者来说,好消息是这个按钮通过 Jetpack 库提供,不需要自己从头实现。而且它自带向下兼容------在 Android 16 及以下的设备上,会自动降级为标准的定位权限弹窗。
按钮长什么样
定位按钮有一定的自定义空间:
-
• 颜色、轮廓样式、大小、形状都可以调整,适配应用的 UI 风格
-
• 定位图标是固定的,不能替换------这是系统安全的一部分,防止应用伪造按钮欺骗用户
-
• 文字标签有预设选项可选
也就是说,你可以让按钮融入你的界面设计,但用户一眼就能认出这是一个"系统级"的定位按钮,而不是应用自己画的。
使用时需要声明 USE_LOCATION_BUTTON 权限。

模糊定位也升级了
除了定位按钮,Android 17 还改进了**模糊定位(Coarse Location)**的算法。
之前的模糊定位用的是固定的 2km 网格------不管你在市中心还是荒郊野外,返回的都是一个 2km x 2km 范围内的模糊位置。
问题在哪?在人口稀疏的地方,2km 范围内可能只有几户人家,模糊定位约等于精确定位。这就是隐私保护的漏洞。

Android 17 引入了基于人口密度的动态网格算法:
-
• 人口密集区域(城市):网格较小,因为 2km 范围内已经有足够多的人
-
• 人口稀疏区域(郊区、乡村):自动增大网格范围,确保模糊位置覆盖足够多的用户
这个改动对开发者来说是透明的,不需要改代码。但如果你的应用依赖模糊定位的精度来做某些逻辑判断,需要注意在偏远地区返回的范围可能比以前更大。
谁在用我的位置?系统告诉你
Android 17 还加强了定位访问透明度。
当非系统应用正在访问定位时,状态栏会显示一个持续的定位指示器。用户点击这个指示器,可以看到最近哪些应用访问了位置数据,并且直接管理权限。
这个"最近应用使用"对话框的设计很直接------不需要跳转到设置页面,在当前界面就能看到信息、关闭权限。
对开发者意味着什么?你的应用在后台偷偷获取位置的行为,用户一眼就能看到。 如果你的应用频繁获取位置但用户感知不到价值,很可能会被直接关掉权限。
权限对话框也变了
最后一个变化是定位权限的运行时对话框本身。
Android 17 重新设计了"精确定位"和"模糊定位"两个选项的视觉呈现,让两者的区分更加明显。
之前的设计中,两个选项看起来太像了,很多用户不知道自己选的是哪个。新设计用更清晰的视觉分隔,引导用户做出更有意识的选择。

写在最后
从 Android 6.0 引入运行时权限,到 Android 10 的后台定位限制,再到 Android 12 的模糊定位选项,Google 一直在收紧定位权限。
Android 17 的定位按钮是这条路上的又一步------从"能不能用"变成了"用的时候才给"。
对用户来说,这是好事。对开发者来说,与其抱怨权限越来越难拿,不如拥抱这个趋势:用定位按钮替代权限弹窗,让用户主动给你定位,而不是被动同意。
你的应用打算怎么接入定位按钮?评论区聊聊。