本文共 1757 字,大约阅读时间需要 5 分钟。
当你的targetSdkVersion版本没有大于等于23,如果没有可以这样使用
1、compileSdkVersion 25、buildToolsVersion "25.0.3",targetSdkVersion 22,运行的软件的时候用的是 API23以下的权限管理。如果写成25会报错,因为没有获取到此权限。
2、compileSdkVersion 22、buildToolsVersion "22.0.1"、targetSdkVersion 22
compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。修改 compileSdkVersion 不会改变运行时的行为。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用
targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。这允许你在适应新的行为变化之前就可以使用新的 API (因为你已经更新了 compileSdkVersion 不是吗?)。
比如获取相机权限
int permissionCheck = ContextCompat.checkSelfPermission(HomeActivity.this,Manifest.permission.CAMERA);
PackageManager.PERMISSION_DENIED 没有此权限
PackageManager.PERMISSION_GRANTED 有此权限
如果是 DENIED 就需要进行申请授权
这时候需要调用
String[] permission = new String[]{Manifest.permission.CAMERA};//相机权限 ActivityCompat.requestPermissions(HomeActivity.this,permission,MY_PERMISSIONS_REQUEST_READ_CONTACT);
/**
*@requestCode 自定义申请的值*@permissions 申请权限的数组
*@grantResults返回权限是否成功数组
*/public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
如果SDK升级到了7.0在开启相机时还需要注意一点
Intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mTempPhotoPath)));
改为
Intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(mContext,"username",new File(PhotoPath)));
在这里推荐一个非常好的权限适配工程(高人所写)考虑的很全面
转载地址:http://ktexa.baihongyu.com/