经过大量的谷歌搜索,以及大量尝试“超出上下文”的代码,我求你帮助我。
我正在试图弄清楚是否可以使用Nativescript在外部存储上写入。我对在应用程序上下文中编写不感兴趣。那么文档显示的内容并不是我想要的。
我已经设法通过Nativescript论坛上的一个帖子实现了这个目标:
android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).toString();
它有效,它给了我一条路,但是当我有这条路时,我不知道如何处理它。如何在该路径中创建文件,阅读它等。
我需要创建的是创建一个用户和应用程序都可以轻松访问的文件夹。用户应该能够使用内置文件资源管理器访问此文件夹。
该应用程序在Angular上运行。
答案 0 :(得分:2)
我在Android设备上确实为此苦苦挣扎,最终归因于:
tns信息
nativescript 6.0.3
tns-core-modules 6.0.7
tns-android 6.0.2
tns插件
nativescript-permissions 1.3.7
示例代码
import * as fs from "tns-core-modules/file-system"
...
// First get the required permissions
// Note: this permissions should also be in your AndroidManifest.xml file as:
// <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
const permissions = require('nativescript-permissions')
permissions.requestPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
.then(() => {
console.log('Required Android permissions have been granted');
})
.catch(() => {
console.error('Required Android permissions have been denied!');
});
// Get the publicly accessable Downloads directory path
const sdDownloadPath = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).toString()
console.log('sdDownloadPath: ' + sdDownloadPath)
// Get a specific folder in that path (will be created if it does not exist)
const myAppFolder = fs.Folder.fromPath(fs.path.join(sdDownloadPath, 'myApp'))
console.log('myApp path: ' + myAppFolder.path)
// Get a file in that path (will be created if it does not exist)
// Note: In this case we try to get a unique file every time this code is run
let date = new Date()
date = date.toISOString().replace('.', '')
const myFile = myAppFolder.getFile(`myfile_${date}.txt`)
console.log('myFile path: ' + myFile.path)
// Write some data to this new file
myFile.writeText('Hello duder 123')
.then(() => {})
.catch((err) => console.log(`Error writing to file: ${err}`))
// Try and read back the data that was written
myFile.readText()
.then((res) => {
console.log(`Text read back: ${res}`)
}).catch((err) => {
console.log(err.stack);
});
// List all files in the myApp folder
myAppFolder.getEntities()
.then((entities) => {
// entities is array with the document's files and folders.
entities.forEach((entity) => {
console.log(entity)
});
}).catch((err) => {
console.log(err.stack);
});
android文件传输问题
我浪费大量时间的一个问题是我可以使用getEntities()
查看文件,但是在Mac上使用第三方工具“ Android File Transfer(AFT)”时看不到它们。我最终偶然发现了“ Android Studio的->设备文件资源管理器”,并且可以看到我创建的所有文件和文件夹,因此意识到问题出在AFT。
我现在使用Airdroid浏览和下载设备文件。
适用参考
https://docs.nativescript.org/angular/ng-framework-modules/file-system (角度文档,但也与nativescript-vue相关)
答案 1 :(得分:1)
我遇到了同样的问题,最后通过在AndroidManifest.xml文件中添加android:requestLegacyExternalStorage="true"
来解决了这个问题
遵循线程here
答案 2 :(得分:0)
你知道你的外部(SD卡)路径吗? 如果它类似于/ storage / emulated / 0,那么您可以尝试使用它来创建文件夹或文件。
import * as fs from "tns-core-modules/file-system";
let externalPath= fs.path.join(android.os.Environment.getExternalStorageDirectory().getAbsolutePath().toString());
//Create a folder with known path
var folder: fs.Folder = fs.Folder.fromPath(sdCardPath+"/test");
//Create a file
var testFile: fs.File = folder.getFile("test.txt");
console.log("Path " + folder.path)
用户应该能够访问此折叠和文件。它位于设备内部存储器中,即“外部”文件夹。
我仍然试图找出如何访问SD卡,但希望上面的代码适合你。