2014-05-10 3 views
4

Я хочу создать автономное приложение на основе браузера, используя HTML и javascript для сбора данных опроса на планшетах Android. Приложение будет состоять из нескольких статических страниц с формами для ввода пользователем данных, которые затем будут храниться локально с помощью Web Storage или IndexedDB. Тем не менее, я также хочу создать небольшое приложение для Android, которое будет захватывать эти данные и передавать их другим устройствам. Возможно ли это, и если да, то как я могу это сделать?Доступ к Web Storage или IndexedDB извне браузера в Android

В частности, я хочу понять, может ли родное приложение получить доступ к хранилищу данных браузера (я могу управлять остальными). Я бы предпочел использовать браузер 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 сгустка или в .html<script> присоединенных к JavaScript глобальной
  • нагрузке WebView, который может получить доступ к локальным URI как file://android_asset/blah.json, а затем запустить некоторые IDB кода для основной массы вставить его в СПР
  • использовать IDB магазин, чтобы управлять своим веб-видом

Таким образом, ответ на вопрос «если и как родное приложение получит доступ к хранилищу данных браузера»: попробуйте обратное. Архитектор, чтобы ваш браузер мог получить доступ к вашему собственному хранилищу данных приложений.

+0

Спасибо за это. Я вижу, что наличие отдельного родного приложения и автономного веб-приложения, вероятно, не сработает, и вместо этого я должен использовать веб-просмотр в родном приложении. Но в таком случае зачем использовать IDB? Не будет ли лучше делать все хранилище данных в родном приложении? – Stuart

+0

Да, наверное. Есть только одна веская причина использовать IDB, и это, если вам нужны индексированные хранилища значений ключа «в масштабе» в Интернете. Если вы собираетесь использовать native, я бы использовал собственное хранилище данных, например ['sqllite'] (http://developer.android.com/reference/android/database/sqlite/package-summary.html). (Фактически, это то, как Firefox реализует IDB: atop SQL.) – buley

+0

Я пытаюсь задуматься о опции для веб-потока данных: ваш код на стороне клиента может создавать URI-данные, которые может потреблять Java. Текущий предел: как вы передаете эти URI с клиентской стороны на родной, если они не разделяют файловую систему? Могут ли они использовать fs через API FileWriter? – buley

0

Это возможно, если вы готовы попробовать несколько иной подход:

  1. вытягивать данные из приложения HTML5 является сложным, но толкая данные в родное приложение проще. В вашем приложении HTML5 должен быть собственный контейнер. Включает ли API-интерфейс контейнера способ доступа к собственным ContentProviders? Если нет, можете ли вы добавить свой собственный собственный код в контейнер для этого? В принципе, если вы можете получить доступ к ContentProviders, то вашему родному приложению необходимо реализовать ContentProvider с привилегиями вставки (которые могут быть ограничены только вашим приложением HTML5). После вставки родное приложение может делать все, что захочет, с данными, включая передачу его другим устройствам.

  2. Если вы настаиваете на извлечении данных из приложения HTML5, это может быть возможно только в том случае, если приложение native и HTML5 на самом деле является одним и тем же приложением, и это возможно только в том случае, если ваш контейнер позволяет вам добавить свой собственный собственный код. Затем у вас будет прямой доступ к хранилищу WebView через класс WebStorage.

+0

Предложить собственные контейнеры без каких-либо исследований или документации кажется бесполезным. Это невозможно, о чем я знаю. Мне было бы интересно увидеть подтверждающую документацию, если я ошибаюсь, и я изменю свой downvote, но, насколько мне известно, Cordova поддерживает только IDB для Windows и BlackBerry. Другие «контейнеры» не поддерживают IDB. – buley

+0

Я никогда ничего не говорил о IDB. Вы путаете свое собственное решение с моим. –

Смежные вопросы