Android NDK开发详解用户位置信息之测试应用的位置工作流及迁移至 Google Play 服务 Location API 和 Context API
本页中的准则有助于您在更新应用时评估该应用,以支持最新的位置信息功能和行为。
测试您的应用如何处理大致位置信息
如需评估您是否需要更新您的应用以支持用户可配置的位置信息精确度,请完成本部分中所述的测试。
处理对话框中的大致位置信息请求
对于用户要求在对话框中让您的应用具有大致位置信息使用权的请求,如需检查您的应用如何处理此类请求,请执行以下操作:
同时请求 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION。
在显示的对话框中,用户可以请求获取大致位置信息,选择顶部附近的大致位置,以及底部附近的仅在使用该应用时允许或仅限这一次。
检查应用的用例是否仍按预期工作,即使您的应用只有大致位置信息使用权也是如此。
处理系统设置中的大致位置信息降级
图 1. 系统设置中应用的位置信息权限屏幕包含使用确切位置。此选项独立于看起来更靠近屏幕顶部的位置信息使用权设置。
对于用户要求在系统设置中将您的应用的位置信息访问权限从确切位置更改为大致位置的请求,如需检查您的应用如何处理此类请求,请执行以下操作:
同时请求 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION。
在显示的对话框中,用户可以请求获取大致位置信息,选择顶部附近的确切位置,以及底部附近的仅在使用该应用时允许或仅限这一次。
转到系统设置中应用的权限屏幕。
在位置权限屏幕上,关闭使用确切位置。图 1 中显示了此选项。
与任何权限降级一样,系统会重启应用的进程。
检查应用的用例是否仍按预期工作,即使您的应用只有大致位置信息使用权也是如此。
处理系统设置中的确切位置升级
对于用户要求在系统设置中将您的应用的位置信息访问权限从大致位置更改为确切位置的请求,如需检查您的应用如何处理此类请求,请执行以下操作:
同时请求 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION。
在显示的对话框中,用户可以请求获取大致位置信息,选择顶部附近的大致位置,以及底部附近的仅在使用该应用时允许或仅限这一次。
转到系统设置中应用的权限屏幕。
在位置信息权限屏幕上,开启使用确切位置,如图 1 所示。
由于此权限更改是升级,因此系统不会重启您的应用。
检查您的应用是否可以在其基于位置信息的用例中接收更准确的位置数据。
迁移至 Google Play 服务 Location API 和 Context API
Google 建议您在需要位置信息服务的应用中使用 Google Play 服务中的 Location API 和 Context API。如果您的应用使用框架位置 API,请务必先迁移到 Google Play 服务,以便充分利用由 Google 提供强有力技术后盾的最新功能。
使用 Google Play 服务是在应用中获取位置信息服务的首选方式,原因如下:
Google Play 服务提供了一个简单的接口和更简洁的 API Surface。
您可以指定所需的服务质量,API 会为您管理底层技术。
Google Play 服务 API 针对性能和电池用量进行了优化。
Google Play 服务 API 得到了积极维护。Google 还在不断改进算法并增加更多功能。
更新应用
以下步骤介绍了更新应用以使用 Location API 和 Context API 的过程:
在您的项目中设置 Google Play 服务。
使用 Location Settings API 验证当前的位置信息设置。
将 Google Play 服务用于地理围栏、运动状态识别和感知等复杂功能。
将 Framework Location API 替换为 Fused Location Provider API。
移除对 Framework Location API 的引用。
在项目中设置 Google Play 服务
如需在项目中使用 Location API 和 Context API,您必须添加对 Google Maven 制品库的引用,并声明依赖所需 API。如需了解详情,请参阅设置 Google Play 服务。
使用 Location Settings API
通过使用 Location Settings API,应用可提供所需的服务质量 (QoS) 级别,并且此 API 会请求用户对系统设置进行适当的更改。如需在应用中使用 Location Settings API,请按以下步骤操作:
在应用清单中请求位置权限。
设置用于指定所需服务质量 (QoS) 级别的 LocationRequest 对象。
使用 Location Settings API 检查当前设置。
如需了解详情,请参阅更改位置信息设置;如需查看示例代码,请参阅 Google Play 位置示例。
使用 Google Play 服务实现复杂功能
Google Play 服务库可帮助您围绕情境和用户周围环境感知来实现全新的用户体验。各种位置信息和情境库除了利用位置信息外,还会利用其他传感器,而且是以省电的方式这样做,从而为您的应用提供更准确的数据,同时减少对电池续航时间的影响。
在应用中纳入这些库,而不是自行编写自定义解决方案:
Geofencing API
Activity Recognition API
Google Awareness API
将 Framework Location API 替换为 Fused Location Provider API
您可以使用 Fused Location Provider API 获取纬度和经度等位置数据。Fused Location Provider API 像 Location Framework API 一样,使用 Location 对象来表示地理位置。该 API 提供的功能可监听位置信息更新以及获取最近一次的已知位置。所有这些功能使 Fused Location Provider API 非常适合替代使用 Framework Location API 的组件,需对应用其余部分做出的改动非常少。
获取最近一次的已知位置是在许多方面实现良好体验的基础,因为它是一项快捷操作,可以使用设备上任意客户端请求的位置数据。如需定期跟踪位置信息,您的应用可以订阅接收位置信息更新,获取最新数据并实现更复杂的体验。
移除对 Framework Location API 的引用
将对 com.google.android.location 软件包中类的引用替换为对 com.google.android.gms.location 软件包中类的引用,但对 Fused Location Provider API 使用的 Location 类的引用除外。通常情况下,您可以从应用中移除用于管理不同提供程序(例如 GPS 和 Wi-Fi)的组件。Location API 和 Context API 会自动管理这些提供程序。
测试应用
如需运行使用最新版 Google Play 服务的应用,您需要安装了 Play 商店应用的设备并且必须登录 Google 帐号。出于开发目的,您可以使用以下选项:
使用 USB 线连接到开发环境的实体设备。
安装了 Play 商店应用的模拟器。
如需详细了解如何将实体设备连接到开发环境,请参阅在硬件设备上运行应用。如需创建包含 Play 商店应用的模拟器,请参阅创建和管理虚拟设备。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2023-08-07。