为什么Android PlacePicker不是(!)需要ACCESS_FINE_LOCATION权限才能工作?

时间:2016-08-06 14:00:14

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

PlacePicker是com.google.android.gms:play-services-places:9.4.0中添加的有用小部件。在此处查找说明:PlacePicker

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

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

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

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

  • 正确选择地点(没有API密钥时无法使用)。
  • 转到"我的位置"通过MyLocation-Button(可能没有API密钥)

任何人都可以确认这一点,或者解释为什么这个小部件在没有授予适当权限的情况下工作?

1 个答案:

答案 0 :(得分:1)

这个问题已经差不多一年了,但我试图找到相同的答案,这样可以帮助其他人。

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

  

1:仅使用应用程序所需的权限才能运行。根据您使用权限的方式,可能有另一种方法可以执行您需要的操作(系统意图,标识符,电话呼叫背景),而无需依赖于对敏感信息的访问。   Source

在这里提供一些线索:

  

如果您对访问用户数据的要求很少 - 换句话说,每次您需要访问数据时,用户都会看到运行时对话框,这不会造成不可接受的破坏性 - 您可以使用基于意图的请求。 Android提供了一些应用程序可以使用而不需要权限的系统意图,因为用户选择在发出基于意图的请求时与应用程序共享的内容(如果有的话)。   Source

我已经考虑使用Marshmallow和Lollipop设备测试权限使用案例,将结果与PlacePicker进行比较,我认为可以使用MediaStore使用此类权限的基于意图的权限到文档:

  

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