在Android中从浏览器外部访问Web存储或IndexedDB

时间:2014-05-10 22:42:17

标签: java android indexeddb android-browser web-storage

我想使用HTML和javascript构建基于浏览器的离线应用,以便在Android平板电脑上收集调查数据。该应用程序将包含一些静态页面,其中包含用于输入数据的表单,然后使用Web Storage或IndexedDB在本地存储。但是,我还想构建一个小型原生Android应用程序,它可以获取这些数据并将其传输到其他设备。这是可能的,如果可以的话,我该怎么做呢?

具体来说,我想了解本机应用程序是否以及如何访问浏览器的数据存储(我可以管理其余部分)。我更喜欢使用Android浏览器,但如果使其更容易,可以使用任何其他浏览器。我发现这个blog post表明它可能是可能的,但我会很感激Android浏览器存储数据的位置以及其他应用程序访问它的容易程度。

3 个答案:

答案 0 :(得分:4)

不幸的是,我不认为数据流可以按照您想要的方式运行。在Chromium WebKit实现中,IDB将数据存储在您无法访问的levelDB文件中(按设计)。

那么我们如何让Java和JavaScript一起玩得很好呢?这是一个很好的问题!我认为,将Java数据转换为IDB数据的唯一好方法是通过客户端。

我有很好的IDB印章,但我的Android经验是非制作。据我所知,这是一个建议的解决方案:

  • 通过本机应用程序视图收集数据
  • 将字符串写入沙盒中的文件,其中数据存储为JSON blob或附加到JavaScript全局的.html <script>
  • 加载可以访问file://android_asset/blah.json等本地URI的webview,然后运行一些IDB代码将其批量插入IDB
  • 使用您的IDB商店来推动基于网络的观看次数

因此,“本机应用程序是否以及如何访问浏览器的数据存储”的答案是:尝试相反的方法。设计它以让您的浏览器访问您的本机应用程序数据存储。

答案 1 :(得分:1)

最简单,最强大的方法,可以将所有记录序列化并在首次运行时加载到您的应用中。

答案 2 :(得分:0)

如果您愿意尝试稍微不同的方法,那么这是可能的:

  1. 从HTML5应用程序中提取数据非常棘手,但将数据推送到本机应用程序更加容易。您的HTML5应用必须具有本机容器。容器API是否包含访问本机ContentProviders的方法?如果没有,您可以将自己的本机代码添加到容器中吗?基本上,如果您可以访问ContentProviders,那么您的本机应用程序只需要实现具有插入权限的ContentProvider(可以仅限于您的HTML5应用程序)。插入后,本机应用程序可以对数据执行任何操作,包括将其广播到其他设备。

  2. 如果你坚持从HTML5应用程序中提取数据,这可能只有当本机和HTML5应用程序实际上是同一个应用程序时才有可能,并且只有当你的容器允许你添加你自己的本机代码时才有可能。然后,您可以通过WebStorage课程直接访问WebView的存储空间。