Android访问权限的问题和代码编译版本问题在此记录一下

首先是这个报错导致文件流写入不到存储里文件了莫名其妙代码也没改动 编译版本也没改动奇奇怪怪可可爱爱

java.nio.file.FileSystemException: /******/******: Operation not permitted

1.首先我们看报错Operation not permitted 不允许操作 那就是权限没给到位所以我们添加申请权限的代码

1.Android6.0之前(这还有再用吗

在清单文件中添加这个

 

然后就开始操作你的存储卡

private void modifyFile() throws IOException {
    String absolutePath =Environment.getExternalStorageDirectory().getAbsolutePath();
        File file = new File(absolutePath + File.separator + "log.txt");
        //有文件测删除无文件则创建
        if (file.exists()) {
            file.delete();
           
        } else {
            file.createNewFile();
            
        }
    }

2.Android6.0 7.0 8.0 9.0

(话不多说就是申请权限 网上封装好的多了去了这里就不一一介绍了)

3.Android X (10.0)

那么好现在开始在申请权限的基础上再加一条

android:requestLegacyExternalStorage="true"


4.Android11 

需要加一个东西这东西你就用吧,一用一个不吱声 一用一个不吱声

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (!Environment.isExternalStorageManager()) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                startActivity(intent);
                return;
            }
        }

5.当然还有最简单的办法

那就是改代码编译版本(别问为什么)问就是这个屎山项目如果加权限的话有大几十处需要修改!(此处吐槽一下上位工友!!!)如果你的项目一开始的编译版本号没变过的话建议还是加一下权限,如果代码用了新的编译版本个人介意退回,如果忘记了那就按照我的操作!

具体修改方法如下

android {
    compileSdkVersion 29
    buildToolsVersion '28.0.2'
    
    defaultConfig {
        applicationId "***.***.***"
        minSdkVersion 21
        targetSdkVersion 29
    }
}

 总之就是别让这些数字超过29就可以了!

码农三三!天天搬砖!

你可能感兴趣的:(android,gradle,androidx,1024程序员节)