我有一个使用Cordova(离子框架)与ngCordova和cordovaSQLite插件的项目。插件已安装,js已添加到html中,WRITE_EXTERNAL_STORAGE权限已添加到androidmanifest,以及我的config.xml中的以下两行
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="AndroidExtraFilesystems" value="sdcard,cache" />
但是,当我运行示例代码时:
$cordovaSQLite.openDB({name: "wt.db"});
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS people (id integer primary key, firstname text, lastname text)");
我收到错误E/cutils(1910): Failed to mkdirat(/storage/usbdisk0/Android): Read-only file system
我检查了我的Android设备(S3运行AOKP),我有一个空的/ storage / usbdisk0,但没有Android文件夹,即使有超级用户我也无法创建它。我还有/ storage / sdcard0和/ storage / sdcard1和/ storage / emulated(0和传统内部链接到内部SD卡)。
我假设问题是插件用于存储数据库的默认目录对我的手机来说是错误的,但这意味着任何人的手机都可能出错。
如果我的假设是正确的,我如何让插件将数据库放在正确的位置?
答案 0 :(得分:0)
我刚刚读到了我的config.xml首选项(我从一些文档中复制并粘贴了)。问题是<preference name="AndroidPersistentFileLocation" value="Compatibility" />
导致文件在错误的位置创建。
如果我用<preference name="AndroidPersistentFileLocation" value="internal" />
替换两个首选项行,我甚至不再需要WRITE_EXTERNAL_STORAGE权限,而且工作正常。