Intereting Posts
Преобразование PCM в AAC с использованием mediacodec Как получить ширину и высоту изображения? «Android Asset Studio» добавляет дополнительное пространство, когда я загружаю свои значки .png, но не использует его внутренние клики. Зачем? Создайте настоящий заставку Можно ли прокручивать ScrollView с помощью ConstraintLayout в режиме Blueprint? Cordova ubuntu: Произошла ошибка при отображении Android-целей Android-просмотр загружаемых данных Android очень медленный Последствия поддержки нескольких пользователей Android (новые в версии 4.2) для модели данных на стороне сервера (например, android_id) Java.net.UnknownHostException: Не удается разрешить хост «<url>»: нет адреса, связанного с именем хоста, и Конец ввода с символом 0 Android CalendarView класс не может быть найден Свернуть все группы, кроме выбранной группы, в расширяемом списке Загружать конкретную строку языка из ресурса? Редактировать прослушиватель текстовых клавиш PorterduffXfermode: очистить раздел растрового изображения Как сопоставить AffineTransform java с матрицей Android?

Есть ли способ передать сообщение из браузера Android в приложение?

У меня есть ситуация, когда я хочу, чтобы некоторые данные были переданы с мобильного веб-сайта в собственное приложение для Android. Усложнение состоит в том, что в обычном случае собственное приложение для Android может не устанавливаться при загрузке мобильного веб-сайта.

Вот пример:

Я являюсь пользователем ExampleApp, и я хочу поделиться с вами некоторыми частями данных ExampleApp, которые никогда не устанавливали ExampleApp.

Я посылаю вам электронное письмо со ссылкой на мобильную веб-страницу, которая знает, какую часть данных вы хотите увидеть при открытии ссылки. Но, поскольку данные доступны только в собственном приложении, а не в мобильном Интернете, вы попадаете на страницу, которая просит вас перейти на Android Market и установить ExampleApp.

Вы устанавливаете ExampleApp, и в идеале вы должны быть взяты непосредственно на часть данных, которую я поделил с вами.

Большая проблема заключается в отключении между просмотром мобильной веб-страницы и установкой ExampleApp.

Я подумал о нескольких решениях, но ни один из них не был успешным (я сказал, что я мог бы просто неправильно их реализовать):

  1. Установите cookie в нашем домене, который включает данные, когда загружается мобильная веб-страница. Затем, когда ExampleApp открывается, запустите WebView, чтобы запросить страницу в том же домене и проверить значение файла cookie. Используйте это, чтобы определить, какую часть данных показывать в ExampleApp.
  2. Используйте JavaScript localStorage для хранения ссылки на кусок данных и используйте WebView, чтобы получить страницу в этом домене и запросить содержимое localStorage из ExampleApp.

В обеих этих ситуациях кажется, что WebView и браузер изолированы друг от друга, поэтому вы не можете получить файлы cookie / localStorage между ними.

Есть ли другой способ «оставить крошилку» или установить сообщение, которое приложение, установленное позже, может получить доступ из браузера?

EDIT: Учитывая некоторые ответы, я должен упомянуть, что я хочу, чтобы вы только один раз щелкнули по ссылке, НЕ нужно щелкнуть один раз, установить приложение, а затем снова щелкнуть, чтобы открыть приложение в нужном месте.

Solutions Collecting From Web of "Есть ли способ передать сообщение из браузера Android в приложение?"

Решение на самом деле довольно простое, я немного удивлен тем, что никто не смог придумать его больше года. Итак, вот он:

Основная идея заключается в использовании файлов cookie для хранения информации. Поток данных выглядит следующим образом:

Открыть веб-страницу -> установить cookie -> перенаправить на рынок -> установить приложение -> запустить браузер с веб-страницей -> прочитать cookie -> начать настраивать намерение с данными cookie -> утаить намерение и прочитать данные cookie

Пользователь посещает веб-страницу (например, сканируя QR-тег). URL-адрес веб-страницы содержит ссылку на данные, которые вы хотите передать, или хранит данные. Веб-сайт устанавливает данные как файлы cookie и перенаправляет на рынок Android ( http://market.android.com/details?id=com.yourapp ). Как только ваше приложение запустится, вы откроете браузер и снова загрузите ту же веб-страницу. Однако на этот раз он обнаруживает, что cookie уже установлен и перенаправляется на настраиваемую схему URL, например example: //example.com/installed? Id = DATA, а не на рынок. Используя фильтр намерений, вы запускаете свою деятельность и извлекаете информацию из намерения.

Вот соответствующий код действия:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); if(intent == null || intent.getData() == null || !"example".equals(intent.getData().getScheme())) { String url = "http://example.com/yourApp/index.php"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); finish(); return; }else { Uri uri = intent.getData(); if("example".equals(uri.getScheme())) { id = uri.getQueryParameter("id"); } } ... initialise your activity ... } 

Простой файл PHP (веб-сайт) для простой демонстрации:

 <?php $value = "123"; if(!isset($_COOKIE["TestCookie"])) { setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */ header("Location: http://market.android.com/details?id=com.yourapp"); exit; }else { header("Location: example://example.com/installed?id=".$_COOKIE["TestCookie"]); exit; } ?> 

И фильтр намерений:

 <!-- Handle URLs like loyalty://example.com/merchant/123 --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="example" android:host="example.com" /> </intent-filter> 

Кстати, я решил блог о проблеме.

Есть ли другой способ «оставить крошилку» или установить сообщение, которое приложение, установленное позже, может получить доступ из браузера?

Я думаю, что есть более простое решение – вариация, используемая сканером штрих-кода.

Шаг №1: Создайте хороший URL-адрес RESTful, который содержит нужную вам информацию. По RESTful я имею в виду нет ? , Нет # , ничего из этого дерьма. Это будет проще, если это будет отличное имя домена, но это может быть что-то в вашем существующем домене. Для целей этого ответа я предполагаю, что этот URL-адрес выглядит как http://android.exampleapp.com/our/custom/data/goes/in/here/somewhere .

Шаг № 2: для всех URL-адресов, которые могут быть созданы по шаблону Шаг №1 (что-либо на http://android.exampleapp.com ), ваш веб-сервер должен показывать страницу «Эй, у вас нет ExampleApp Если вы нажмете эту ссылку здесь, она перенесет вас на Android Market, где вы можете установить ExampleApp! Затем попробуйте нажать ссылку, которая привела вас на эту страницу, и она запустит ExampleApp и даст вам … ummm … все эти хорошие данные ».

Шаг № 3: Внедрите операцию в ExampleApp, которая имеет <intent-filter> с действием VIEW , категорию BROWSEABLE и элемент <data> идентифицирующий вашу схему и домен (и, если необходимо, базовый путь, если это будет Быть одинаковым для всех этих ссылок).

То, что пользователь видит, если у них нет установленного ExampleApp и нажмите ссылку, является ли ваша веб-страница с шага №2, из которой они могут перейти, установите ExampleApp.

То, что пользователь видит, если у них есть установленный ExampleApp и щелкните ссылку, является вашей деятельностью, которая может захватить URL через getIntent().getData() и сделать что-то полезное.


ОБНОВИТЬ

В комментарии вы писали:

Мобильная веб-страница => хранить данные => пользователь устанавливает приложение => открывает пользователь app => приложение извлекает данные => приложение открывается непосредственно к полученному содержимому

ИМХО, вы делаете слишком много предположений о том, что пользователь собирается делать. Могут существовать дни, недели или месяцы задержки между стрелками, которые я выделяю жирным шрифтом.

Если вы собираетесь распространять его самостоятельно (например, с вашего веб-сервера), у вас всегда есть возможность «сжечь» их пользовательский APK с данными внутри него, но тогда вам придется иметь дело с управлением обновлениями самостоятельно.

Или, если вы собираетесь использовать систему на основе учетной записи, создайте учетную запись на своем сайте перед отправкой на Android Market. Храните данные в этой учетной записи, и когда они подключаются к этой учетной записи из приложения, вы можете сопоставить данные с приложением.

Используйте параметр GET: http://exampleapps.com?token=mK7Fyt5 Подумайте о том, как работает приложение YouTube. Вы отправили ссылку на видео. Если у вас нет приложения YouTube, вы видите мобильный сайт (который в вашем случае может быть ссылкой для установки). Если вы это сделаете, вас спросят, следует ли открыть ссылку YouTube с помощью собственного приложения, а родному приложению передается URL-адрес, с которого он был вызван, из которого он может проанализировать параметр для показа видео.

Используйте следующий фильтр намерений:

 <intent-filter> <data android:scheme="http" android:host="exampleapps.com"/> <action android:name="android.intent.action.VIEW" /> </intent-filter> 

См. https://stackoverflow.com/a/7577379/710284

Вы можете использовать ссылку INSTALL_REFERRER, например:
http://market.android.com/details?id=your.package.name&referrer=your_wanted_parameter

После того, как пользователь нажмет эту ссылку и установит приложение, ваш широковещательный приемник получит трансляцию com.android.vending.INSTALL_REFERRER с параметром «your_wanted_parameter».

Больше информации:
http://code.google.com/mobile/analytics/docs/android/#android-market-tracking
Получить реферер после установки приложения из Android Маркета
Получить тег реферера Google Analytics Android