最近搞NDK开发,费了不少功夫封装好的arr包,在多个机型上都有测试,突然在华为P10上出现crash,经过查看日志及结合该机型Android系统版本,觉得很可能是系统兼容性的问题,因为到读写文件操作权限问题。
关于Android7.0 系统新特性:https://developer.android.google.cn/about/versions/nougat/android-7.0.html 不了解的可以查看Google官方文档介绍。
之所以会在7.0系统上会出现crash的情况,主要是Android7.0更改了权限管理,加入了动态权限,让用户授权危险权限管理。
以下是两种兼容Android7.0系统权限管理的两种方法:
1.最直接也最简单的方法:修改Module的build.gradle中的targetSDKVersion = 22;
2.使用谷歌提供的EasyPermissions:
①.build,gradle中添加依赖:
dependencies {
compile 'pub.devrel:easypermissions:0.1.9'
}
②.检查权限
String[] perms = {Manifest.permission.CAMERA, Manifest.permission.CHANGE_WIFI_STATE};
if (EasyPermissions.hasPermissions(this, perms)) {
//...
} else {
//...
}
③.申请权限
EasyPermissions.requestPermissions(this, "拍照需要摄像头权限", RC_CAMERA_AND_WIFI, perms);
④.实现EasyPermissions.PermissionCallbacks接口,直接处理权限是否成功申请
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List
// Some permissions have been granted
// ...
}
@Override
public void onPermissionsDenied(int requestCode, List
// Some permissions have been denied
// ...
}
Easypermissions主要简化了对权限申请结果的处理和判断,直接以接口的方式回调处理结果。
以上两种是针对兼容Android7.0做出的权限管理,在项目中有用到,做一个小结,由于本人水平有限,欢迎大家批评指正,谢谢!