2015-09-25 81 views
5

在cordova android應用程序中(滾動至設備,版本,插件列表底部,所有內容在撰寫本文時都處於最新狀態)我希望優先存儲文件放在外部SD卡上,如果SD卡不存在,則使用內部存儲器。我是我保存路徑設置爲:在android上使用cordova和file插件強制外部sdcard

persistentFS= cordova.file.externalDataDirectory||cordova.file.DataDirectory||fileSystem.root.toURL();

其最終的價值是文件:///storage/emulated/0/Android/data/com.fubar.app/files/,同cordova.file .externalDataDirectory。

我已設置: <access origin="cdvfile://*" /> ... <preference name="AndroidPersistentFileLocation" value="Compatibility" /> <preference name="AndroidExtraFilesystems" value="files-external,sdcard,files,documents,cache,cache-external,root" /> config.xml中 , <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在AndroidManifest.xml中,並設置各種魔法index.html中 安全的元標記。我補充說SD卡被插入,寫入使能,並且我確認我可以用 - 例如 - 文件管理器寫入它。它 包含Android/data/com.fubar.myapp/files /文件夾,因爲它應該。

無所不包:文件被寫入 - 並從內部設備存儲讀取。我已經閱讀了關於這個主題的所有谷歌搜索,但沒有任何東西讓我更接近任務(一些人建議使用文件系統根插件,但它似乎已被歸檔文件插件)。

任何提示? TIA, ALF

編輯:利用亞行外殼,我可以看到,該應用的外部SD卡的文件夾具有的絕對路徑:

`/storage/extSdCard/Android/data/com.fubar.myapp/files` 

,並呼籲resolveLocalFileSystemURL file:///storage/extSdCard/Android/data/com.fubar.myapp/files

愉快成功。我不認爲這是要走的路,因爲這條路是依賴於設備的。


裝置:三星Galaxy標籤10.5,使用科爾多瓦5.3.1棒棒糖5.0.1,與插件: 科爾多瓦-插件裝置1.0.1 「設備」 科爾多瓦-插件的對話框1.1.1「通知「 科爾多瓦 - 插件文件3.0.0‘文件’ 科爾多瓦 - 插件 - 文件傳輸1.3.0‘文件傳輸’ 科爾多瓦 - 插件媒體1.0.1‘媒體’ 科爾多瓦 - 插件白名單1.1.0」白名單」

構建主機的Linux FC21

回答

2

呦你可以撥打Context.getExternalFilesDirs()。這將返回應用程序可以寫入數據的目錄數組。其中之一將是SD卡路徑/存儲/ SD卡名/ Android /數據/應用程序名/文件。

大多數製造商還設置SECONDARY_STORAGE環境變量以公開SD卡根路徑。您可以嘗試撥打System.getenv("SECONDARY_STORAGE")

Android不公開允許您獲取sdcard根路徑的任何API。您可以使用反射並從StorageManager獲取sdcard根路徑。java - > getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590

+2

我能做到這一點科爾多瓦內,在JavaScript?如果我嘗試,上下文沒有定義,所以我會認爲它是你正在談論的Java API。 –

0

由於似乎沒有真正的科爾多瓦回答這個,但這裏是我發現使用file plugin。我還希望保存在SD卡上,並且稍後將數據附加到電子郵件中,Gmail現在需要從SD加載附件。這個博客讓我朝着正確的方向前進https://www.neontribe.co.uk/cordova-file-plugin-examples/。在部分談到寫文件基本上只是更換

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (directoryEntry) { 

與此

window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (directoryEntry) { 

,它應該是工作。

+0

它不適合我。我仍然在我的設備Galaxy S7上獲得內部存儲(仿真)的路徑。 – JaSmin

相關問題