9

在 PhoneGap 中,我使用

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);

访问文件系统。
在我的华硕平板电脑中,它没有external sdcard(我没有插入任何可移动设备),所以我认为文件系统根指向internal sdcard. 但是,在我的 HTC Desire HD 中,数据被写入了external sdcard. (因为数据只存在于 microSD 卡中。)
那么真相是什么?我在 W3C 文档中看不到任何线索,也许我遗漏了什么......

PS:两个安卓版本都是ICS(冰淇淋三明治)。

4

1 回答 1

16

PhoneGap 的 FileAPI,虽然旨在反映 HTML5 规范,但实际上是 W3C 文档的自定义实现。 您可以在此处找到特定于其 API 的文档。 虽然大多数情况下都可以使用相同的方式,但在 Web 和每个设备上实现事物的方式之间存在一些细微的差异。存储位置就是其中之一。

要了解 PhoneGap 如何处理持久存储,我不得不深入研究 Cordova 源代码。 此文件包含 PhoneGap FileAPI 使用的方法。相关的代码块从第 871 行开始。基本上,API 将调用Environment.getExternalStorageState(). 如果返回Environment.MEDIA_MOUNTED,意味着有可移动或不可移动的 SD 卡用于存储,API 返回的 FileSystem 是已挂载存储的根目录,使用Environment.getExternalStorageDirectory(). 这解释了您在具有内部和外部 SD 卡的设备之间看到的行为差异,两者都被系统视为已安装的外部存储。如果遇到没有外置存储的设备,即!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)返回的FileSystem的根目录为“data/data/packageName”internal storage,类似于 call Context.getFilesDir(),通常返回类似“data/data/packageName/files”的内容。

于 2013-05-06T15:26:02.410 回答