【发布时间】:2019-08-22 02:21:47
【问题描述】:
我通过cordova 开发了一个Android 应用程序,它在webview 中运行。如何让应用程序在铬中使用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。
【问题讨论】:
-
this one 似乎也相关。
-
@MartinZeitler 感谢您的 cmets。我已经检查了这两个其他问题,但没有一个在 webview 中使用
persistent storage。他们所做的只是使用temporary storage。 -
你曾经解决过你的问题吗?