gmaps 的 MarshMallow 权限

MarshMallow Permission for gmaps

如果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 而不是其他人授予权限,为什么?

您应该只需要为 LOCATION 和 STORAGE 组请求权限。我也很确定 Fine location 包括 Coarse 权限,因此您不需要在清单中包含该行。

should I ask for each one to the user with requestPermissions ?

首先什么时候使用 requestPermission ?

requestPermission is only call after checkSelfPermission 当此方法不 return PERMISSION_GRANTED.

您可以找到 android M 在运行时需要的 list of permission。这些权限中的每一个都是权限组的一部分。 WRITE_EXTERNAL_PERMISSION 来自 android.permission-group.STORAGEACCESS_COARSE_LOCATION / ACCESS_FINE_LOCATION 来自 android.permission-group.LOCATION

如果用户允许访问权限 - 例如 ACCESS_COARSE_LOCATION-,那么 android 将自动授予此权限组的访问权限 - 即permission-group.LOCATION-.因此,如果您稍后 checkSelfPermission 获得 ACCESS_FINE_LOCATION,您应该会收到 PackageManager.PERMISSION_GRANTED.

如果您的应用程序崩溃,这意味着您在向用户请求权限组位置之前尝试调用,例如 LocationServices.FusedLocationApi.requestLocationUpdates

编辑:

不要忘记 requestPermission 异步的 。所以不要在requestPermission之后立即调用需要权限的方法。要调用需要权限的方法,您应该重写 onRequestPermissionsResult,它会为您提供权限列表及其状态 -granted/denied-。