在PhoneGap中,我使用
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
访问文件系统.
在我的华硕平板电脑中,它没有external sdcard
(我没有插入任何可移动设备)所以我认为文件系统根指向internal sdcard
.但是,在我的HTC Desire HD中,数据写入了external sdcard
.(因为数据只存在于microSD卡中.)
那么真相是什么?我在W3C文档中看不到任何线索,也许我想念一些东西......
PS:Android版本都是ICS(冰淇淋三明治).
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" ,类似于调用Context.getFilesDir()
,它通常返回类似"data/data/packageName/files"的内容.