android - 授予无限持久存储权限

标签 android cordova webview indexeddb

基于IndexedDB of Cordova Storage文档,存储空间限制在 5MB 左右(缺点段落的最后一点)。

我的应用程序需要更多存储空间,因此我必须别无选择地越狱。

第 1 轮:请求更多存储配额。

navigator.webkitPersistentStorage.requestQuota(quota, function(granted) {
    window.requestFileSystem(window.PERSISTENT, granted, cbSucc, cbErr);
}, cbErr);
  1. 无论“配额”是多少,“授予”始终为零。
  2. 在 Android webview 的 'window' 对象中没有 requestFileSystem() 函数。
  3. 基于 ( https://stackoverflow.com/a/42355894 ) :它仅适用于沙盒文件系统。也许这不是我所需要的。

第 2 轮:实现一个推送通知服务 worker ,它将自动授予持久性存储权限。

navigator.serviceWorker.register('sw.js')
.then(function(swNotify) {
    swNotify.pushManager.subscribe({
        userVisibleOnly : true,
        applicationServerKey : pubKey
    });
});
  1. Service Worker 已注册。
  2. Android webview 上没有 PushManager,因此无法执行 pushManager.subscribe()。
  3. 这适用于桌面版 Chrome 和 Android(webview 除外)。

第 3 轮:请求持久存储许可。

navigator.storage.persist().then(...);
  1. persist() 函数总是返回 false 而不要求用户授予权限。
  2. 已请求并授予 WRITE_EXTERNAL_STORAGE 权限。

环境:

  • Android:7.0(通过 Android 模拟器)
  • WebView :58.0.3029.83
  • Cordova :7.0.1
  • Cordova的andorid平台:6.2.3

我仍然是 5MB jail 的囚犯,我还能做什么?

最佳答案

您可以使用 cordova-sqlite-storage用于创建具有无限存储空间的原生 SQLite 数据库的插件:

与集成到 Webview 中的 IndexedDB(和 WebSQL)不同,它使用存储在磁盘上的 .db 文件中的本地数据库。

目前没有 IndexedDB 接口(interface)垫片(尽管它在 TODO list 上)所以您需要重新处理对数据库的 API 调用。但是,例如,有一个 adapter对于Lawnchair这使得 API 易于使用。

关于android - 授予无限持久存储权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515003/

相关文章:

android - 扩展文件 : Once the expansion files is downloaded start the Intent to next activity

当对象作为参数从 Angular2 组件传递时,外部 HTML 文件中的 JavaScript 函数不会被调用

android - 如何将 phonegap 应用程序直接部署到设备

android - React Native WebView,如何存储用户名和密码

javascript - 将数组从 Activity 传递到 Javascript

android - Crashlytics 在应用程序启动时因 Resources$NotFoundException 而崩溃

java - 从新事件 [Android] 更改 TextView 的文本

android - getArrayLength() 返回一个巨大的数字......

android - 亚行 logcat Cordova 安卓 4

android - 使用 webview 时在 Android 中禁用 'go' 按钮表单提交