棉花糖系统中gmaps的权限问题

6

如果 gmaps 需要这些权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  1. 我应该使用requestPermissions向用户请求每个权限吗?
  2. 我检查了好几次,只有在用户未授予android.permission.ACCESS_FINE_LOCATION权限时才会崩溃,但其他权限不会,为什么?
2个回答

3

我应该使用 requestPermissions 向用户请求每一个权限吗?

首先,什么时候需要使用 requestPermission

requestPermission 只有在 checkSelfPermission 方法返回 PERMISSION_GRANTED 之外的值时才会被调用。

你可以在运行时找到 Android M 所需的权限列表。这些权限都属于一个权限组。例如,WRITE_EXTERNAL_PERMISSION 属于 android.permission-group.STORAGE 组,而 ACCESS_COARSE_LOCATION / ACCESS_FINE_LOCATION 则属于 android.permission-group.LOCATION 组。

如果用户允许访问某个权限 -例如ACCESS_COARSE_LOCATION-,那么安卓将自动授予该权限组的访问权 -即permission-group.LOCATION。因此,如果您稍后调用checkSelfPermission检查ACCESS_FINE_LOCATION,您应该会收到PackageManager.PERMISSION_GRANTED
如果您的应用程序崩溃,这意味着您尝试在从用户请求位置权限之前调用例如LocationServices.FusedLocationApi.requestLocationUpdates编辑: 不要忘记requestPermission异步的。因此,不要在requestPermission之后立即调用需要权限的方法。要调用需要权限的方法,您应该覆盖onRequestPermissionsResult,它会给您一个权限列表及其状态 -已授予/已拒绝-。

您还可以查看解释该过程的Android模式视频 https://www.youtube.com/watch?list=PLWz5rJ2EKKc-lJo_RGGXL2Psr8vVCTWjM&v=C8lUdPVSzDk - xiaomi

3

你只需要请求LOCATION和STORAGE组的权限。我也很确定Fine location包括了Coarse的权限,所以你不需要在清单文件中加入那一行。


“Fine location includes permission for Coarse” 是什么意思?如果我请求了其中一个权限,那么同一组中的所有权限都会被授予吗? - Daniel Gomez Rico
3
ACCESS_COARSE_LOCATION用于获取移动数据和Wi-Fi信息,而ACCESS_FINE_LOCATION不仅包含移动数据和Wi-Fi信息,还包含GPS信息。因此,精准定位功能“包括”粗略定位功能。 - xiaomi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接