家伙!我很难从我的android模拟器中获取文件!
①这是我的模拟器信息: Genymotion供个人使用 - 三星Galaxy Note 3 - 4.4.4 - API 19 - 1080x1920
我已在 内部存储空间 目录中存储了两个要测试的mp3文件,路径为 / storage / emulated / 0 / Download < / EM> 即可。
如您所见,这两个mp3文件位于 下载 目录中。我的麻烦在于我永远无法让这两个文件正确。
③这是我的代码:
if(Ti.Filesystem.isExternalStoragePresent()){
var sdkDir_1 = Ti.Filesystem.getExternalStorageDirectory();
console.info('------------->sdkDir_1');
console.info(sdkDir_1);
var sdkDir_2 = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory);
console.info('------------->sdkDir_2');
console.info(sdkDir_2);
var downLoadDir = Ti.Filesystem.getFile(sdkDir_2.parent.directoryListing[7]);
console.info('------------->downLoadDir.getDirectoryListing()');
console.info(downLoadDir.getDirectoryListing());
...
这是控制台:
[INFO] [android, 4.4.4, 10.0.3.15] ------------->sdkDir_1
[INFO] [android, 4.4.4, 10.0.3.15] appdata://
[INFO] [android, 4.4.4, 10.0.3.15] ------------->sdkDir_2
[INFO] [android, 4.4.4, 10.0.3.15] {
"readonly": false,
"bubbleParent": true,
"writable": true,
"directoryListing": [],
"symbolicLink": false,
"apiName": "Ti.Filesystem.File",
"hidden": false,
"nativePath": "file:///storage/emulated/0/co.test.zone",
"executable": false,
"size": 4096,
"name": "co.happysoft.zone",
"parent": {
"readonly": false,
"bubbleParent": true,
"writable": true,
"directoryListing": [
"Music",
"Podcasts",
"Ringtones",
"Alarms",
"Notifications",
"Pictures",
"Movies",
"Download",
"DCIM",
"Android",
"storage",
...
[INFO] [android, 4.4.4, 10.0.3.15] ------------->downLoadDir
[INFO] [android, 4.4.4, 10.0.3.15] {
"readonly": true,
"bubbleParent": true,
"writable": false,
"directoryListing": [],
"symbolicLink": false,
"apiName": "Ti.Filesystem.File",
"hidden": false,
"nativePath": "file:///android_asset/Resources/api/Download",
"executable": false,
"size": 0,
"name": "/Download",
"parent": null
}
我很困惑, 下载 路径应该如何更改,以及它的 目录列表 什么都没有。而且,我想知道为什么 sdkDir_1 也没有。任何人都有一个很好的解决方案,提前谢谢。
答案 0 :(得分:0)
内部存储对于存储它们的应用是私有的: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
请将外部存储空间用于您需要从创建它们以外的应用程序访问的文件。
答案 1 :(得分:0)
好的,非常感谢 @Fokke Zandbergen 提醒我,我犯了一个错误,试图通过外部存储目录获取模拟器的内部文件 。现在,很明显,如果您想从模拟器或真正的移动设备获取本地文件,可能以下建议可能对您有所帮助:
①从模拟器中获取本地文件
1 Android ,请尝试以下路径: file:/// storage / emulated / 0
首先,目录模拟仅对模拟器有用,所有android模拟器都有此目录。然后,目录 0 表示您的模拟器只有一个内部存储目录,因为模拟器没有外部存储 sdcard 。
[2] iPhone ,请尝试以下路径: / Users / xxx / Library / Developer / CoreSimulator / Devices / F34851D0-AFA5-443E-AEF6-70B695FB9C5E / data
对于目录 F34851D0-AFA5-443E-AEF6-70B695FB9C5E ,它是模拟器ID,您可以通过 ti info <来检查它/ strong>命令。
②从真实移动设备获取本地文件
1 Android ,请尝试以下路径: file:/// storage / sdcard0
请注意, sdcard0 是移动设备的内部存储空间。如果您需要从外部存储目录获取本地文件,也意味着 SD卡,那么您应该尝试这种方式:
if(Ti.Filesystem.isExternalStoragePresent()){
var sdkDir = Ti.Filesystem.getExternalStorageDirectory();
}
[2] iPhone ,导致iPhone没有外部存储,因此它与模拟器相同。好吧,我没有这样测试,也许你应该试试。
好吧,我最近测试过真正的移动设备文件路径,我的意思是 SDCard(外部存储) 的文件路径。但是,我应该告诉你一个坏消息,Titanium API检测外部存储是否存在的方法并不好用。以下是详细信息:
if(Ti.Filesystem.isExternalStoragePresent()) 总是返回true,但 SDCard 不会出现。
我认为,如今,几乎所有智能手机都内置了 内部存储 (绝不意味着智能手机的自我存储,如电话簿,我的意思是内部存储是一个特殊的外部存储,但嵌入到智能手机中),SDCard是一个扩展存储,但它们是相同的。
< / LI>不同的制造商有不同的外部存储设置
在我的测试期间,当智能手机来自 HUAWEI 时,外部存储路径将变为: file:/// storage / sdcard1 ,区分内部存储 sdcard0 。
但是,当制造商 SAMSUNG 时,外部存储路径为: file:/// storage / extSdCard 。
因此,我们必须检查制造商以定义外部存储路径:
var sdCardPath;
if(Ti.Platform.manufacturer == 'HUAWEI'){
sdCardPath = Ti.Filesystem.getFile('file:///storage/sdcard1');
}
else if(Ti.Platform.manufacturer == 'samsung'){
sdCardPath = Ti.Filesystem.getFile('file:///storage/extSdCard');
}
嗯,太可怕了!
所以,我一直没有好好的想法通过不同的制造商从真实的移动设备接近文件。伙计们,你有个好主意吗?
答案 2 :(得分:0)
打开模拟文件夹文件列表,选择所有文件或仅选择需要的文件,然后从三个点中选择移动文件并确认然后文件到达“下载”文件夹,该文件夹可从图库或存储文件树轻松访问