如何解决EACCES权限被拒绝也适用于我的应用创建的文件?
前提
很快,我将不得不将我的应用从 android 10 更新到 android 11。
compileSdkVersion 30
targetSdkVersion 30
我在以前的版本中已经有了
android: requestLegacyExternalStorage = "true"(文档说这将在 android 11 上被忽略)
我在之前的版本中已经有了 FileProvider 定义,所以我保持原样。
在 ANDROID 10 上一切正常。
现在,
从在模拟器 (Android 11) 上进行的测试来看,即使我的目标是 SDK 30,我的应用程序仍然能够在“下载/我的应用程序名称”中创建“我的自定义目录”而不会出现问题。 .. 但这不是被阻止了吗?
既然它允许我这样做,那么为什么 EACCES(权限被拒绝) 会在我尝试读取我创建的同一(外部)目录中的文件时给我一个错误?自己的应用程序?
该文件夹之前甚至不存在,应用创建了它 ...阻止它读取其中的静态文件有什么意义?
这不是矛盾吗?
您是如何适应这些限制的,我认为鉴于我的实际结果仅部分采用了这些限制……我缺少什么?
谁能向我解释发生了什么?
例如,这似乎仍然适用于 Android11:
String PublicDirAccess = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
//create new file directory object
directory = new File(PublicDirAccess + "/" + UtiGlobal.getAppTitle(MyApp.getContext()) + "/");
// if no directory exists,create new directory
if (!directory.exists())
{
directory.mkdir();
//MediaScannerConnection.scanFile(MyApp.getContext(),new String[] {directory.getAbsolutePath()},null,null);
forceMediaScanner(MyApp.getContext(),directory);
}
但是阅读文档应该不起作用......它不应该创建文件夹......或者不?
但是如果我尝试像这样读取其中的文件:
BufferedReader reader = new BufferedReader(new InputStreamReader(mystreamInDownloadFolder));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line).append("\n");
}
reader.close();
StringOut= sb.toString();
它给了我错误: EACCES(权限被拒绝)
但是如果它让我创建文件夹,为什么它会阻止我阅读它? ... 应用程序可以在由其代码创建的文件夹中继续读取不是更正确吗?即使它在外部目录中。
我的问题很简单:
这是正常的吗?我非常清楚不应再允许这样做,但我不明白为什么会创建该文件夹。
我添加了如何更简单地复制问题:
1) 在 /storage/emulated/0/Download/Test 中创建一个文件夹
2) 在应用程序中创建 test.txt 文件
3) 通过usb PC、NETWORK或Android使用X-plore、Es-explorer等修改文件内容
您刚刚失去访问该文件! ...所以这将是不可能通过转移我的应用程序备份,CSV,文本文件从一个设备到另一个生成的文件? ...但这正常吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。