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

本文首发于微信公众号"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 的定位按钮是这条路上的又一步------从"能不能用"变成了"用的时候才给"。

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

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

相关推荐
untE EADO11 小时前
在 MySQL 中使用 `REPLACE` 函数
android·数据库·mysql
iblade11 小时前
Android CLI And Skills 3x faster
android
阿巴斯甜13 小时前
SharedUnPeekLiveData和UnPeekBus的区别:
android
阿巴斯甜13 小时前
UnPeek-LiveData的使用:
android
我就是马云飞13 小时前
我废了!大厂10年的我面了20家公司,面试官让我回去等通知!
android·前端·程序员
limuyang214 小时前
在 Android 上用上原生的 xxHash,性能直接拉满
android
Fate_I_C15 小时前
ViewModel 的生命周期与数据保持
android·kotlin
凛_Lin~~15 小时前
安卓实现textview跑马灯效果
android·java
Fate_I_C16 小时前
Kotlin函数一
android·开发语言·kotlin
我讲个笑话你可别哭啊16 小时前
Android Studio无线调试连接安卓设备
android·ide·android studio