【已解决】 android10 申请文件读写权限的问题
起因
为了记录应用日志,引入了Xlog这么个库。准备把文件写到外置存储。
我读写的位置是这样的:
Environment.getExternalStorageDirectory().getPath() + "/gps/xlog"
写完发现需要申请文件读写权限,然后就开始了一堆报错
经过
我通过XXPermission进行权限申请如下:
XXPermissions.with(this)
// 申请多个权限
.permission(Permission.ACCESS_COARSE_LOCATION)
.permission(Permission.WRITE_EXTERNAL_STORAGE)
.permission(Manifest.permission.MANAGE_EXTERNAL_STORAGE)
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.request(new OnPermissionCallback() {
//......
}
并在清单文件申请如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:requestLegacyExternalStorage="true"
....
</application>
现在遇到的问题
- 如果我只申请 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE,就会报错如下:
Please register permissions in the AndroidManifest.xml file
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
2.如果我按照报错所说,加上MANAGE_EXTERNAL_STORAGE标签,那么就会报错:
If you have applied for MANAGE_EXTERNAL_STORAGE permissions,
do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions
意思就是,申请了MANAGE_EXTERNAL_STORAGE,就不能申请READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE
3.好,于是我就把 READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE 这两个权限的申请删掉了
删掉之后,就会报
Please register permissions in the AndroidManifest.xml file <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
意思就是不能删READ_EXTERNAL_STORAGE。
问
如果加上MANAGE_EXTERNAL_STORAGE,就要删READ_EXTERNAL_STORAGE。如果删了,又会报错不能删。
那么到底能不能删?到底怎么样才能读写外置存储?
答案在我这里。不复杂。
1:删除MANAGE_EXTERNAL_STORAGE
2:保留上面read,write,申请权限
.permission(Permission.WRITE_EXTERNAL_STORAGE)
.permission(Permission.read_EXTERNAL_STORAGE)大概。
申请读写。
3:目录问题,你上面的目录不能用。要用,就用下面的。
Context.getExternalFilesDir():SDCard/Android/data/应用包名/files/ 目录
Context.getExternalCacheDir(): SDCard/Android/data/应用包名/cache/目录
看你喜欢那个了。
访问这2个目录就好了,其他位置的你现在把握不住。
看我项目