示例中心
功能在线体验
控制台

高德 开发 Android 定位SDK 开发指南 实用工具 Android 6.0权限说明

更新时间:2018年02月02日

Android 6.0系统在原有的AndroidManifest.xml声明权限的基础上新增了运行时权限动态检测,定位等权限也包含在其中。

第 1 步,声明目标SDK版本

Android 6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限,所以如果您APP设置的targetSdkVersion低于23,在运行时也不会崩溃。

Android Studio:

在build.gradle中声明targetSdkVersion为23。

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.1'

    defaultConfig {
        applicationId "com.amap.location.demo"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "2.5.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

Eclipse:

在AndroidManifest.xml中声明targetSdkVersion为23。

<uses-sdk android:minsdkversion="14" android:targetsdkversion="23"></uses-sdk>

第 2 步,检查并申请定位权限

在运行定位之前需要对定位权限进行检查和申请,示例代码如下,也可参考示例Demo的CheckPermissionsActivity.java文件。

//SDK在Android 6.0下需要进行运行检测的权限如下:
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE

//这里以ACCESS_COARSE_LOCATION为例
 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
              != PackageManager.PERMISSION_GRANTED) {
          //申请WRITE_EXTERNAL_STORAGE权限
          ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                  WRITE_COARSE_LOCATION_REQUEST_CODE);//自定义的code
      }

第 3 步,用户授权

在请求权限后,系统会弹出相应的Dialog提示用户授予权限,如下图所示:

第 4 步,接收回调

用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult方法。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    //可在此继续其他操作。
}
示例中心 功能
在线体验
常见问题