我尝试通过执行以下操作从 Android Q 上的下载文件夹中读取文件:
File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File f = new File(downloadDir, "some-existing-file");
if(!f.exists()) {
throw new IllegalStateException();
}
Uri furi = Uri.fromFile(f);
try {
ParcelFileDescriptor des = getContentResolver().openFileDescriptor(
furi, "r", null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我还在android:requestLegacyExternalStorage="true"
清单中设置了请求WRITE_EXTERNAL_STORAGE
和READ_EXTERNAL_STORAGE
运行时权限。
该文件存在,但是当尝试打开文件描述符时,出现异常:
java.io.FileNotFoundException: open failed: EACCES (Permission denied)
。
我阅读了Android Q 存储中所做的更改,但无法弄清楚如何在没有用户交互的情况下读取文件。
谢谢!
经过几个小时的尝试弄清楚到底发生了什么,我终于找到了解决方案。
我在清单中添加了:
android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)
requestLegacyExternalStorage
直接从 Android Studio 重建和重新安装时,构建系统或 Android 运行时不会在清单中注册更改,并且不会注册请求 。
我通过完全卸载应用程序来修复它:adb uninstall com.example.app
并从 android studio 重新安装它。
归档时间: |
|
查看次数: |
3704 次 |
最近记录: |