我正在Ionic中创建一个应用程序,我想在其中添加从外部存储设备读取文件的功能,这些设备通过micro USB(在Android设备上)或Lightning(在iPhone上)连接到移动设备。
在研究之后;我没有找到与File plugin不同的东西,import {Injectable} from '@angular/core';
import {File} from "@ionic-native/file";
@Injectable()
export class MyClassProvider {
constructor(public fileNative: File) {}
public findPathOfMainUSBFolder() {
let fs = this.fileNative;
let folders = [fs.applicationDirectory, fs.applicationStorageDirectory, fs.cacheDirectory, fs.dataDirectory, fs.externalRootDirectory, fs.externalApplicationStorageDirectory, fs.externalCacheDirectory, fs.externalDataDirectory, "file:///storage/"];
for (let mainFolder of folders) {
this.fileNative.listDir(mainFolder,'').then( success => {
console.log("success ", mainFolder, "Contents: ", success);
}, rej => {
console.log("rej ", mainFolder, "Contents: ", rej);
}).catch(err => {
console.log("err ", mainFolder, "Contents: ", err);
})
}
}
}
在移动设备上有一个很好的读/写访问API和安装在设备上的SD卡,但我还是无法读取USB闪存在手机上连接的棒。
目前我正在使用以下代码在Android设备上进行测试
available directories
循环遍历所有File Chooser,看它是否会列出USB闪存棒的内容。这些目录中没有一个指向/是USB上的根目录。
我错过了什么,或者根本无法使用File插件访问USB闪存棒?
在深入了解文件系统并使用public findPathOfMainUSBFolder(callback) {
let usbDevicesConnected = [];
this.fileNative.listDir("file:///", "storage").then( success => {
for (let entry of success) {
if (entry.isDirectory == true && entry.name != "emulated" && entry.name != "self") {
usbDevicesConnected.push({path: "file:///storage/", dirName: entry.name});
console.log("USB ", entry.name, " has been added to the list");
}
}
callback(usbDevicesConnected)
}, rej => {
console.log("rej file:///, storage ", "Contents: ", rej);
}).catch(err => {
console.log("err file:///, storage ", "Contents: ", err);
})
}
帮助我识别USB上文件的完整路径之后,我最终得到了以下函数,该函数为每个连接的USB设备创建了一个包含一个对象的数组,该数组具有USB的路径:
this.findPathOfMainUSBFolder( usbArray => {
for (let usb of usbArray) {
this.fileNative.listDir(usb.path, usb.dirName).then( success => {
console.log("USB with ID " + usb.dirName + " has contents: ", success)
}, rej => {
console.log("REJ on USB with ID " + usb.dirName + " : ", rej)
}).catch(err => {
console.log("ERr on USB with ID " + usb.dirName + " : ", err)
})
}
})
可以在下面调用以列出USB根级别上存在的所有文件:
qazxswpoi
这适用于Android手机,但我还没有在iPhone上测试过。