android - 使用cordova和文件插件在android上强制使用外部sdcard

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

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

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" /> 在配置文件中, <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在AndroidManifest.xml中并在index.html中设置各种附魔 安全元标记。我补充说插入了 SD 卡,启用了写入,并且我 确认我可以用 - 例如 - 文件管理器写入它。它 包含 Android/data/com.fubar.myapp/files/文件夹,因为它应该。

一切都是徒劳的:文件被写入内部设备存储并从中读取。我已经阅读了所有关于这个主题的谷歌搜索结果,但没有什么能让我更接近这个任务(一些人建议使用 file-system-roots 插件,但它似乎已被 file 插件包含)。

有什么提示吗? TIA, 阿尔夫

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

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

并在

上调用 resolveLocalFileSystemURL

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

成功了。我不认为这是要走的路,因为这条路取决于设备。


设备:Samsung Galaxy tab 10.5,使用 cordova 5.3.1 的 lollipop 5.0.1,带有插件: cordova-plugin-device 1.0.1“设备” cordova-plugin-dialogs 1.1.1“通知” cordova-plugin-file 3.0.0"file" cordova-plugin-file-transfer 1.3.0“文件传输” cordova-plugin-media 1.0.1“媒体” cordova-plugin-whitelist 1.1.0 “白名单”

构建主机为Linux FC21

最佳答案

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

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

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

关于android - 使用cordova和文件插件在android上强制使用外部sdcard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783161/

相关文章:

java - 如何正确实现 Google Play 结算库

java - 坏习惯 - 让 fragment 使用来自 Activity 的对象?

cordova - 基于Android SDK为Ionic创建Cordova插件

javascript - 如何在 Cordova 中几秒钟后执行 JS 代码?

twitter-bootstrap - Phonegap 是否适合构建响应式 UI?

javascript - 如何避免在cordova android应用程序上处理深度链接两次?

angular - ionic 网络类型 = null

android - 动态 Textview 滚动条不显示

android - 在安卓上写python代码

ios - FB.login()phonegap facebook 插件出错