紧急预警!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 的定位按钮是这条路上的又一步------从"能不能用"变成了"用的时候才给"。

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

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

相关推荐
方白羽9 小时前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
曲幽13 小时前
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
android·termux·nohup·services·wake-lock
plainGeekDev13 小时前
单例模式 → object 声明
android·java·kotlin
程序员陆业聪14 小时前
读者点单·03|Compose 与传统 View 混用的 12 个真实坑
android
程序员陆业聪14 小时前
读者点单·02|Android 启动优化实战:Trace 抓取→Application 编排→冷启动全流程拆解
android
Coffeeee14 小时前
帮你快速理解AI Agent之我想招个Android实习生
android·人工智能·agent
恋猫de小郭15 小时前
苹果 AirPods 协议,Android 也可以使用完整版 AirPods 能力
android·前端·flutter
黄林晴16 小时前
告别无效重建:Gradle 9.6.0 解决 CI 构建缓存失效痛点告别无效重建:Gradle 9.6.0 解决 CI 建筑缓存失效痛点
android·gradle
张风捷特烈16 小时前
Flutter 类库大揭秘#01 | path_provider架构与设计
android·flutter
_阿南_1 天前
Android文件读写和分享总结
android