android6.0手机权限问题

今天测试提了一个头像上传失败的bug,让我郁闷很久!我的手机明明就可以成功,为什么他的失败。然後拿测试的手机过来调试 , 发现他用到时6.0系统 . 断点调试 , 抛了个异常,读取文件失败 . 那我清单文件中明明添加权限了 . 然后重点在6.0系统上着手,经过搜索资料发现6.0的手机权限需要代码读取清单文件中添加的权限.

谷歌官方将权限分为了两类,一个是正常权限(Normal Permissions),这类权限不涉及用户隐私,是不需要用户进行授权的,比如访问网络,手机震动等。还有一类是危险权限(Dangerous Permissions),一般是涉及到用户隐私的,需要用户进行授权,比如操作SD卡的写入,调用相机,录音等。这里只以文件读写为例!
  • 在读取图片的类中声明权限常量

//声明常量权限
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

- 在读取文件的地方先判断是否打开权限

// 是否添加权限
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
//如果没有权限,申请权限
if (permission != PackageManager.PERMISSION_GRANTED) {

   ActivityCompat.requestPermissions(
       activity,PERMISSIONS_STORAGE,11
     );
 }

申请权限结果回调

    @Override
    public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == 11) {

    LogUtils.out("---请求权限成功==");

            } else {
        LogUtils.out("---请求权限失败==");
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

最后当然也要在清单文件中添加读写文件的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

PS: Fragment中要接收请求权限的回调,不能用ActivityCompat去请求权限,直接requestPermissions请求就可以了

猜你喜欢

转载自blog.csdn.net/zane_xiao/article/details/52765798