【问题标题】:Why does Android PlacePicker not(!) require ACCESS_FINE_LOCATION permission to work?为什么 Android PlacePicker 不(!)需要 ACCESS_FINE_LOCATION 权限才能工作?
【发布时间】:2016-08-06 14:00:13
【问题描述】:

PlacePicker 是com.google.android.gms:play-services-places:9.4.0 中添加的有用小部件。在这里找到描述:PlacePicker

文档明确指出您需要 ACCESS_FINE_LOCATION 权限才能使其工作。

在 Marshmallow 及更高版本上,您还必须要求用户授予此权限。
但它似乎没有做任何这些工作!
我的应用程序可以

  • 提供地图 API 密钥
  • 在 AndroidManifest 中定义权限
  • 随时要求用户授予此权限

但是在 Marshmallow 设备上运行应用程序确实会启动 PlacePicker,我可以

  • 正确选择地点(没有 API 密钥不可能)。
  • 通过 MyLocation 按钮转到“我的位置”(可能无需 API 密钥)

谁能证实这一点或解释为什么这个小部件在没有适当权限的情况下工作?

【问题讨论】:

  • 我还需要知道为什么,以及是否应该询问 ACCESS_FINE_LOCATION

标签: android google-maps-android-api-2 android-6.0-marshmallow android-permissions


【解决方案1】:

这个问题已经有将近一年的历史了,但我试图找到相同的答案,以便对其他人有所帮助。

这是因为 PlacePicker 使用“基于意图的请求”。文档不是很清楚,但它说

1:仅使用您的应用运行所需的权限。根据您使用权限的方式,可能有另一种方式来做您需要的事情(系统意图、标识符、电话呼叫背景),而无需依赖对敏感信息的访问。 Source

在这里给出一些线索:

如果您对访问用户数据的要求并不频繁(换句话说,每次您需要访问数据时向用户显示运行时对话并不是不可接受的破坏性),您可以使用基于意图的请求。 Android 提供了一些系统意图,应用程序可以在不需要权限的情况下使用这些意图,因为用户在发出基于意图的请求时选择与应用程序共享的内容(如果有的话)。 Source

我已经弄清楚使用 Marshmallow 和 Lollipop 设备测试权限用例,将结果与我认为可能使用基于意图的权限与 MediaStore 进行比较的结果,MediaStore 根据文档使用这种权限:

例如,MediaStore.ACTION_IMAGE_CAPTURE 或 MediaStore.ACTION_VIDEO_CAPTURE 的意图操作类型可用于捕获图像或视频,而无需直接使用 Camera 对象(或需要权限)。在这种情况下,每次捕获图像时,系统意图都会代表您请求用户的许可。 例如,可以使用 MediaStore.ACTION_IMAGE_CAPTURE 或 MediaStore.ACTION_VIDEO_CAPTURE 的意图操作类型来捕获图像或视频,而无需直接使用 Camera 对象(或需要权限)。在这种情况下,每次捕获图像时,系统意图都会代表您请求用户的许可。 Source

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 2011-07-15
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多