2015-12-24 63 views
0

傢伙!我無法從我的android模擬器中獲取文件!無法從android模擬器(鈦)

①這是我的模擬器信息: Genymotion自用 - 三星Galaxy Note 3 - 4.4.4 - API 19日 - 1080×1920

②這裏是模擬器的文件的樹: enter image description here

我已經儲存了兩個mp3文件測試中內部存儲目錄,路徑是/存儲/模擬/ 0 /下載enter image description here enter image description here

正如你可以看到,這兩個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 
    } 

我很困惑的是如何下載路徑應該改變它的目錄列表什麼也沒有。而且,我很想知道爲什麼這個東西沒有任何東西。任何人都有一個很好的解決方案,我提前感謝。

回答

0

好了,感謝@Fokke的Zandbergen這麼多,讓我想起我犯了一個錯誤,試圖通過外部存儲目錄獲得模擬器的內部文件。而現在,很明顯,如果你想從模擬器或實際移動設備獲得本地文件,也許後續的建議可以幫助你:

①從模擬器獲得本地文件

1的Android,試試這個路徑:文件:///存儲/模擬/ 0

首先,目錄仿真僅適用於模擬器,所有的android模擬器都有這個目錄。然後,目錄表示您的模擬器只有一個內部存儲目錄,導致模擬器沒有外部存儲器sdcard

[2] iPhone,試試這個路徑:/用戶/ XXX /庫/開發商/ CoreSimulator /設備/ F34851D0-AFA5-443E-AEF6-70B695FB9C5E /數據

對於目錄F34851D0 -AFA5-443E-AEF6-70B695FB9C5E,它是模擬器ID,您可以通過ti info命令來檢查它。

②從真正的移動設備

1的Android獲取本地文件,試試這個路徑:文件:///存儲/ sdcard0

注意這一點,sdcard0是內部存儲您的移動設備。如果您需要從外部存儲目錄中獲取本地文件,也意味着SD卡,那麼你應該試試這個方法:

if(Ti.Filesystem.isExternalStoragePresent()){ 
    var sdkDir = Ti.Filesystem.getExternalStorageDirectory(); 
} 

[2] iPhone,導致iPhone沒有外部存儲,所以其與模擬器相同。那麼,我沒有這樣測試,也許你應該試試看。



好球員,我已經測試了真正的移動設備文件路徑最近,我的意思是SD卡(外部存儲)的文件路徑。然而,我應該告訴你一個壞消息,Titanium API提供的檢測外部存儲器是否存在的方法並不好用。下面是詳細信息:

  1. 如果(Ti.Filesystem.isExternalStoragePresent())總是返回true雖然,在SD卡不存在。

    我假設,如今,幾乎所有的智能手機都內置嵌入了內部存儲(從不意味着智能手機的自我存儲像電話簿,我指的是內部存儲是一種特殊的外部存儲但嵌入智能手機),SDCard是一個擴展存儲,但它們是相同的。

  2. 不同的製造商有外部存儲

    不同的設置在我的測試中,當智能手機來自華爲外部存儲路徑成爲:文件:///存儲/ sdcard1,與內部存儲區別sdcard0

    然而,當製造商SAMSUNG,外部存儲路徑是:文件:///存儲/ 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'); 
    } 
    

    嗯,這太可怕了!

所以,我一直沒有得到一個好主意,從不同的製造商真正的移動設備接近文件。夥計們,你有一個好主意嗎?