【发布时间】:2020-07-12 15:56:44
【问题描述】:
我在 NativeScript 上编写了一个 Android 应用程序。
我在App_Resources/Android/AndroidManifest.xml中定义了所需的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我知道访问存储是不够的,所以我已经在运行时请求了权限,并在系统设置中检查了它。
通过浏览器将一些图像下载到“下载”文件夹后,我想在我的应用程序中阅读它。最初我通过nativescript-mediafilepicker 获得了一个文件路径,但要知道我使用以下sn-p:
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)
【问题讨论】:
-
您应该使用 API 以编程方式构建路径,
android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();,现在您可以将此路径传递给文件系统。 -
我尝试过,但没有成功。我更新了我的问题。
-
根据错误,您似乎没有获得运行时权限。您可以尝试在 Playground 上重现该问题并分享链接吗?
标签: android nativescript nativescript-angular nativescript-plugin