2014-05-10 62 views
4

我想使用HTML和JavaScript構建一個基於瀏覽器的離線應用程序來收集Android平板電腦上的調查數據。該應用程序將包含一些帶有表單的靜態頁面,供用戶輸入數據,然後使用Web存儲或IndexedDB將其存儲在本地。不過,我也想構建一個小型原生Android應用程序,它可以獲取這些數據並將其傳輸到其他設備。這是可能的,如果是的話,我會怎麼做呢?從Android瀏覽器之外訪問Web存儲或IndexedDB

具體而言,我想了解本機應用程序是否以及如何訪問瀏覽器的數據存儲(我可以管理其餘部分)。我寧願使用Android瀏覽器,但可以使用任何其他功能,如果這樣做更容易。我發現這個blog post,這表明它可能是可能的,但我會感謝一些指針,指出Android瀏覽器存儲數據的位置以及另一個應用程序可以輕鬆訪問的位置。

+2

我不知道,你可以很容易地做到這一點在你所問的方式,但你也許可以用這些例子來創建一個應用程序,都使用普通的Android數據存儲,而顯示網頁和管理數據通過將數據從js傳遞到本機應用程序,可以獲得比基於瀏覽器的數據存 http://stackoverflow.com/questions/6357191/how-to-pass-data-from-javascript-to-android-webview-in-this-case http://stackoverflow.com/questions/5264489/how -do-i-pass-return-values-from-a-javascript-function-to-android –

回答

1

最簡單和最健壯的方式來將所有記錄序列化並在第一次運行時加載到您的應用程序中。

+0

感謝您的建議。您的意思是瀏覽器應用程序會將記錄序列化,然後用戶將不得不將這個文件保存爲一個文件,然後原生應用程序將訪問該文件? – Stuart

4

不幸的是我不認爲數據流可以按照你想要的方式工作。在Chromium WebKit實現中,IDB將數據存儲在您應該無法訪問的levelDB文件中(按設計)。

那麼我們如何讓Java和JavaScript一起玩呢?這是一個很好的問題!正如我所看到的,將Java數據轉換爲IDB數據的唯一好方法是通過客戶端。

我有很好的IDB印章,但我的Android體驗是非生產。從我瞭解的是,這裏有一個建議的解決方案:

  • 通過本機應用程序的意見
  • 寫一個字符串在沙箱中的文件與數據存儲爲JSON BLOB或在.html<script>附加收集數據到JavaScript全球
  • 負載,可以訪問本地URI像file://android_asset/blah.json,然後網頁視圖運行一些IDB代碼批量將其插入IDB
  • 使用IDB店來驅動你的基於Web的意見

因此,「本機應用程序訪問瀏覽器數據存儲的方式和方式」的答案是:嘗試相反。將其設計爲讓您的瀏覽器訪問您的本機應用程序數據存儲。

+0

非常感謝。我可以看到,擁有獨立的本機應用程序和離線網絡應用程序可能無法正常工作,我應該在本機應用程序中使用網頁瀏覽。但在那種情況下,爲什麼要使用IDB?在本地應用中執行所有數據存儲工作不是更好嗎? – Stuart

+0

是的,可能。使用IDB只有一個很好的理由,那就是如果您需要在網絡上「按比例」索引鍵值存儲。如果你本土化,我會使用本地數據存儲,如['sqllite'](http://developer.android.com/reference/android/database/sqlite/package-summary.html)。 (實際上,這就是Firefox實現IDB的原因:在SQL之上。) – buley

+0

我想要考慮一個用於web-> native數據流的選項:你可以讓你的客戶端代碼創建Java可以使用的數據URI。當前的stumper:你如何將這些URI從客戶端傳遞給本地,除非它們共享一個文件系統?他們可以通過FileWriter API共享一個fs嗎? – buley

0

,如果你願意嘗試一個稍微不同的方法這是可能的:

  1. 從HTML5應用拉出數據是棘手,但將數據推送到本機應用程序更加容易。您的HTML5應用必須擁有原生容器。容器API是否包含訪問原生ContentProviders的方法?如果沒有,你可以添加自己的本地代碼到容器來做到這一點嗎?基本上,如果您可以訪問ContentProviders,那麼您的本機應用程序只需實現具有插入權限的ContentProvider(可以僅限於您的HTML5應用程序)。插入後,本機應用程序可以根據數據執行任何操作,包括將其廣播到其他設備。

  2. 如果你堅持從HTML5應用程序提取數據,這可能只有當本機和HTML5應用程序實際上是相同的應用程序,並且只有當你的容器允許你添加自己的本地代碼時纔有可能。然後,您將通過WebStorage類直接訪問WebView的存儲。

+0

在沒有任何研究或文檔的情況下建議本地容器看起來沒有幫助。我知道這是不可能的。如果我錯了,我會有興趣看到支持文檔,我會改變我的失望,但據我所知,Cordova只支持Windows和BlackBerry的IDB。其他「容器」不支持IDB。 – buley

+0

我從來沒有對IDB說過什麼。你混淆了你自己的解決方案。 –