android - 如何更正 NativeScript 应用程序中“下载”文件夹中的读取文件?
问题描述
我在 NativeScript 上编写了一个 Android 应用程序。
我已经定义了所需的权限App_Resources/Android/AndroidManifest.xml
:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我知道这不足以访问存储,所以我在运行时请求了权限并在系统设置中检查它。
通过浏览器将一些图像下载到下载文件夹后,我想在我的应用程序中阅读它。最初我得到了一个文件路径nativescript-mediafilepicker
,但知道我使用以下代码段:
console.log(fs.File.exists('/storage/emulated/0/Download/7zoVG9uML7AyjwHl.png'));
const file = fs.File.fromPath('/storage/emulated/0/Download/7zoVG9uML7AyjwHl.png');
file.readSync(e => console.log('ERROR ' + e));
在控制台中打印:
JS: true
JS: ERROR Error: java.io.FileNotFoundException: /storage/emulated/0/Download/7zoVG9uML7AyjwHl.png: open failed: EACCES (Permission denied)
我做错了什么?
更新
我添加了WRITE_EXTERNAL_STORAGE
权限,但没有效果:
permissions.requestPermissions(p).then(async () => {
const publicDirectory = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
const fullPath = `${publicDirectory}/7zoVG9uML7AyjwHl.png`;
const file = fs.File.fromPath(fullPath);
file.readSync(e => console.log('ERROR ' + e));
});
JS: ERROR Error: java.io.FileNotFoundException: /storage/emulated/0/Download/7zoVG9uML7AyjwHl.png: open failed: EACCES (Permission denied)
解决方案
所以,解决方案是:
- 添加AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- 添加AndroidManifest.xml
<application android:requestLegacyExternalStorage="true" ...>
- 通过字符串路径获取文件:
const file = fs.File.fromPath('/storage/emulated/0/Download/7zoVG9uML7AyjwHl.png');
file.readSync(e => console.log('ERROR ' + e));
推荐阅读
- c# - 字符串引用未设置为字符串的实例。参数名称:输入 ASP.Net MVC
- python - 自定义 django 管理命令以添加/修改 views.py、filters.py 等
- css - 为什么 `table-cell` 的内部显示模式不可自定义?
- ios - 自动续订订阅的免费试用实施
- javascript - 固定跨度双重外观和字母切割
- android - Firebase 安全规则:只允许更新一个字段
- vba - 将范围值分配给变量时出错表明它未设置(尽管它不是对象)
- docker - 码头工人更改图像名称?
- reactjs - 在反应中将 D3 缩放功能添加到 Nivo 热图
- php - 在不同的目录上安装 PHP