今天写关于图片读写的代码时,发现在华为MT7这个手机上读写文件失败,刚开始以为自己的权限写错了,后来的经过多方查找,发现并不是代码的问题,而是Android6.0在权限处理上做了改动。在6.0之前的版本,需要什么样的权限只需要在Manifest文件中添加相应的权限即可,6.0及其以后的版本需要动态申请权限。
直接上代码:
//动态请求读写权限
private void setPermissions() {
//版本大于6.0的情况
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M/*23*/) {
int REQUEST_CODE_CONTACT = 101;//请求码
String[] permissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
//验证是否许可权限
for (String str : permissions) {
if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {//如果没有允许,则申请权限
//申请权限
this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
return;
}
}
}
}
//回调函数
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 101) {
Log.i("aaa", "---请求权限成功==");
} else {
Log.i("aaa", "---请求权限失败==");
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
同时还要在Manifest中添加相应的权限处理:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>