Android 6.0系统在原有的AndroidManifest.xml声明权限的基础上新增了运行时权限动态检测,定位等权限也包含在其中。
声明目标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>
复制代码
检查并申请定位权限在运行定位之前需要对定位权限进行检查和申请,示例代码如下,也可参考示例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
- }
复制代码
用户授权在请求权限后,系统会弹出相应的Dialog提示用户授予权限,如下图所示:
接收回调用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult方法。 - @Override
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- //可在此继续其他操作。
- }
复制代码
|