首页 > 解决方案 > 如何更正 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)

标签: androidnativescriptnativescript-angularnativescript-plugin

解决方案


所以,解决方案是:

  1. 添加AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  1. 添加AndroidManifest.xml
<application android:requestLegacyExternalStorage="true" ...>

  1. 通过字符串路径获取文件:
const file = fs.File.fromPath('/storage/emulated/0/Download/7zoVG9uML7AyjwHl.png');
file.readSync(e => console.log('ERROR ' + e));

推荐阅读