使用cordova和文件插件强制Android上的外部SD卡

时间:2015-09-25 13:19:55

标签: android cordova cordova-plugins sd-card android-sdcard

在一个cordova android应用程序中(滚动到底部的设备,版本,插件列表,所有这些都是最新的写作)我想优先将文件存储在外部SD卡上并使用内部存储器,如果SD卡不存在。我将保存路径设置为:

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

其最终值为file:///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中设置各种附魔 安全metatag。我补充说,插入了SD卡,支持写入和I 确认我可以用 - 例如 - 文件管理器写入它。它 包含Android / data / com.fubar.myapp / files /文件夹,应该如此。

全无用文件:文件被写入 - 并从内部设备存储中读取。我已经阅读了关于这个主题的所有谷歌,但没有任何东西让我更接近任务(一些人建议使用文件系统根插件,但它似乎已被文件插件包含)。

任何提示? TIA, ALF

编辑:使用adb shell,我可以看到该应用的外部SD卡文件夹的绝对路径为:

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

并在

上调用resolveLocalFileSystemURL

file:///storage/extSdCard/Android/data/com.fubar.myapp/files

愉快地成功。我不认为这是要走的路,因为该路径取决于设备。

设备:Samsung Galaxy tab 10.5,lollipop 5.0.1使用cordova 5.3.1,带插件:  cordova-plugin-device 1.0.1&#34; Device&#34;  cordova-plugin-dialogs 1.1.1&#34;通知&#34;  cordova-plugin-file 3.0.0&#34; File&#34;  cordova-plugin-file-transfer 1.3.0&#34;文件传输&#34;  cordova-plugin-media 1.0.1&#34; Media&#34;  cordova-plugin-whitelist 1.1.0&#34; Whitelist&#34;

构建主机是Linux FC21

2 个答案:

答案 0 :(得分:2)

您可以致电Context.getExternalFilesDirs()。这将返回一个应用程序可以写入数据的目录数组。其中一个是sdcard路径/ storage / sdcardname / Android / data / appname / files。

大多数制造商还设置了SECONDARY_STORAGE环境变量以公开SD卡根路径。您可以尝试拨打System.getenv("SECONDARY_STORAGE")

Android不公开任何允许您获取SD卡根路径的API。您可以使用反射并从StorageManager.java获取SD卡根路径 - &gt; getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590

答案 1 :(得分:0)

由于似乎没有真正的Cordova答案,但这里是我使用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) {

它应该有效。