IOException: No such file or directory 问题解决

2023-05-16

文章目录

  • 问题描述:
  • 注册权限
  • 动态申请权限
  • 总结:

问题描述:

Android开发,在访问文件夹创建文件的时候,报错IOException: No such file or directory ,代码本身没有问题。


在这里插入图片描述

注册权限

找了一会儿,突然间想起来这是一个访问内存,需要权限,在AndroidManifest中进行注册:

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

在这里插入图片描述

  • 因为读和写是同一大权限下的,申请其中一个,就可以将同一大权限下的所有都获取到

  • 同时,官方规定了危险权限列表,如下图的危险权限,AndroidManifest中注册了也无法直接使用(API 23以后),需要动态申请。

在这里插入图片描述

动态申请权限

动态申请权限,可以在一开始进入程序的时候就全部申请,也可以在用到这个功能的时候再向用户申请,因为我用的很早,所以在一开始进入的时候就申请了,需要加入如下代码:

 String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
    List<String> mPermissionList = new ArrayList<>();

    // private ImageView welcomeImg = null;
    private static final int PERMISSION_REQUEST = 1;
    // 检查权限

    private void checkPermission() {
        mPermissionList.clear();

        //判断哪些权限未授予
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permissions[i]);
            }
        }
        /**
         * 判断是否为空
         */
        if (mPermissionList.isEmpty()) {//未授予的权限为空,表示都授予了

        } else {//请求权限方法
            String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
            ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_REQUEST);
        }
    }

    /**
     * 响应授权
     * 这里不管用户是否拒绝,都进入首页,不再重复申请权限
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PERMISSION_REQUEST:

                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                break;
        }
    }

同时在onCreate中触发检查权限的方法;加入checkPermission()方法
在这里插入图片描述

总结:

  1. 是否在AndroidManifest中注册了权限
  2. 若是注册了权限且开发环境大于23,是否进行了动态申请权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOException: No such file or directory 问题解决 的相关文章

随机推荐