我通过cordova
开发了一个Android应用程序,该应用程序在网络视图中运行。如何使应用程序在铬中使用persistent storage
?它仅消耗temporary storage
。我需要使用persistent storage
的原因是我可以请求更多的空格。如果我使用temporary storage
并且用完了最大限制,则临时存储将删除数据库上的旧数据。
我在chrome控制台中运行以下代码,它给了我we are using 0 of 0 bytes
,这意味着我可以使用的永久性存储空间为0。
navigator.webkitPersistentStorage.queryUsageAndQuota (
function(usedBytes, grantedBytes) {
console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
},
function(e) { console.log('Error', e); }
);
然后我运行以下代码以请求更多存储空间:
navigator.webkitPersistentStorage.requestQuota (
100 * 1024 * 1024, function(grantedBytes) {
window.requestFileSystem(PERSISTENT, grantedBytes, (d) => console.log(d), e => console.error(e));
}, function(e) { console.log('Error', e); }
);
之后什么也没有发生,仍然可以使用0个存储空间。我想知道如何在Webview中使用持久性存储。我需要为此指定权限吗?
我的应用程序的权限为:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.INTERNET" />
我检查了另一个问题Android webview & localStorage,但与我的问题完全不同。我要向我的Webview授予永久存储权限,但是该问题并未说明如何使用persistent storage
,而是使用temporary storage
,这是Webview中的默认存储。
我在Java代码上设置了setDatabaseEnabled(true)
,但是它没有使用persistent storage
。相反,它使用temporary storage
。
答案 0 :(得分:0)
setDatabaseEnabled()似乎仍然是唯一可用的方法:
设置是否启用数据库存储API。默认值为
false
。
即使无法再更改数据库的位置;如 setDataBasePath()读为:
此方法已在API级别19中弃用。
数据库路径由实现管理,调用此方法将无效。
使用JavaScriptInterface
可能是持久保存数据的一种变通方法。为example。
相比之下,科尔多瓦documentation还列出了一些可能的选择。