关于Android兼容7.0系统版本的问题

来源:互联网 发布:网站数据uv的含义 编辑:程序博客网 时间:2024/06/03 17:40

            最近搞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<String> list) {
        // Some permissions have been granted
        // ...
    }


    @Override
         public void onPermissionsDenied(int requestCode, List<String> list) {
        // Some permissions have been denied
         // ...
    }

Easypermissions主要简化了对权限申请结果的处理和判断,直接以接口的方式回调处理结果。

以上两种是针对兼容Android7.0做出的权限管理,在项目中有用到,做一个小结,由于本人水平有限,欢迎大家批评指正,谢谢!


原创粉丝点击