How to register some URL namespace (myapp://app.start/) for accessing your program by calling a URL in browser in Android OS?
Как зарегистрировать некоторое пространство имен URL (myapp: // app.start /) для доступа к вашей программе путем вызова URL в браузере в ОС Android?
Итак, я хочу создать приложение для Android, чтобы оно было зарегистрировано где-нибудь в ОС Android (или просто запускалось при запуске системы) и когда пользователь телефона нажимает специальную кнопку на веб-странице внутри веб-браузера a la:
<a href="myapp://mysettings">Foo</a>
мое приложение всплывет и запустится, используя параметры, отправленные по этому URL.
Итак, как мне это сделать?
Мне нужен учебник с кодом!
Переведено автоматически
Ответ 1
Во-первых, чтобы иметь возможность запускать ваше приложение по ссылке с пользовательской схемой "myapp" в браузере / почте, установите фильтр намерений следующим образом.
и для анализа запросов по вашей ссылке myapp: //someaction /?var= str& varr=string
(код чрезмерно упрощен и не имеет проверки ошибок.)
Intentintent= getIntent(); // check if this intent is started via custom scheme link if (Intent.ACTION_VIEW.equals(intent.getAction())) { Uriuri= intent.getData(); // may be some test here with your custom uri Stringvar= uri.getQueryParameter("var"); // "str" is set Stringvarr= uri.getQueryParameter("varr"); // "string" is set }
[редактировать] если вы используете пользовательскую схему для запуска своего приложения, одна из проблем заключается в том, что: WebView в других приложениях может не понимать вашу пользовательскую схему. Это может привести к отображению 404 страницы для этого браузера для ссылки с пользовательской схемой.
Ответ 2
Вам нужно следовать стандартным правилам для URI через W3C и тому подобное, что в основном означает: не делайте этого.
Итак, способ сделать это - использовать обычные средства для описания в вашем манифесте намерений, которые вы собираетесь обрабатывать с помощью определенного компонента, особенно определения имени действия в вашем собственном пространстве имен (com.mycompany.myapp.action.DO_SOMETHING или что-то еще). Затем вы можете создать Intent, соответствующий вашему компоненту, и использовать Intent .toUri(), чтобы получить представление URI этого. Это может быть помещено в вашу ссылку, а затем при нажатии будет искать что-то, что обрабатывает и, таким образом, найдет ваше приложение. Примечание для запуска из браузера подобным образом компонент должен обрабатывать категорию, доступную для просмотра. (Вам не нужно указывать это в намерении, которое вы вводите в ссылку, браузер автоматически добавит это за вас.)
Это более новая функция платформы, которая позволяет вам направлять ссылки только на ваше приложение, чтобы другие приложения не могли их перехватывать и обрабатывать.
Вкратце: прочитайте обычную документацию по намерениям и фильтрам намерений (например, учебное пособие NotePad, хотя здесь вы не будете использовать content: URI, вероятно, просто пользовательские действия) и заставьте ваше приложение работать таким образом. Затем вы можете создать ссылку браузера для запуска вашего приложения таким же образом, при условии, что ваш фильтр намерений обрабатывает категорию, доступную для просмотра.
Ответ 3
Вот мой вклад в chase.
Создайте фильтр намерений в действии, которое вы хотите загрузить в манифест, следующим образом:
Затем для содержимого вашего веб-сайта вам нужно сгенерировать URI из намерения. Включите следующий код в свое действие (этот код можно удалить, как только ссылка будет сгенерирована):
Чтобы получить дополнительные функции, укажите следующее в своем действии, которое может получать пользовательское действие (как определено в манифесте):