在PhoneGap中,我使用
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
访问文件系统。
在我的ASUS平板电脑中,它没有external sdcard
(我没有插入任何可移动设备)所以我认为文件系统根指向internal sdcard
。但是,在我的HTC Desire HD中,数据被写入external sdcard
。 (因为数据只是驻留在microSD卡中。)
那么真相是什么?我在W3C文档中看不到任何线索,也许我想念一些......
答案 0 :(得分:15)
PhoneGap的FileAPI虽然旨在反映HTML5规范,但实际上是W3C文档的自定义实现。 You can find the docs specific to their API here.虽然它大部分都可以使用,但在Web和每台设备上的实现方式之间存在一些细微差别。存储的位置就是其中之一。
要了解PhoneGap如何处理持久存储,我不得不深入研究Cordova源代码。 This file here contains the methods used by the PhoneGap FileAPI.相关的代码块从第871行开始。基本上,API会调用Environment.getExternalStorageState()
。如果返回Environment.MEDIA_MOUNTED
,意味着存储removable or non-removable SD card,则API返回的FileSystem是已安装存储的根目录,使用Environment.getExternalStorageDirectory()
。这解释了您在具有内部和外部SD卡的设备之间看到的行为差异,两者都被系统视为已安装的外部存储。如果您遇到没有任何外部存储设备的设备,即!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
,则返回的FileSystem的根目录将是internal storage中的“data / data / packageName”,类似于调用Context.getFilesDir()
,这通常是{{1}}返回类似“data / data / packageName / files”的内容。