MarshMallow gmaps权限

Dan*_*ico 6 android google-maps-android-api-2 android-6.0-marshmallow

如果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" />
Run Code Online (Sandbox Code Playgroud)
  1. 我应该向用户询问每一个requestPermissions吗?
  2. 我查了几次,它只是崩溃说用户没有给予权限android.permission.ACCESS_FINE_LOCATION但不给其他人,为什么?

xia*_*omi 3

我应该向用户询问每一项吗requestPermissions

首先什么时候使用 requestPermission ?

仅当此方法未返回时,才会在checkSelfPermission之后调用requestPermissionPERMISSION_GRANTED

您可以找到android M 在运行时所需的权限列表。这些权限中的每一个都是权限组的一部分。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,它为您提供权限列表及其状态(授予/拒绝)。