Может ли кто-нибудь помочь мне узнать, как запустить приложение для Android от браузера Android?
Запуск пользовательского приложения для Android от браузера android
Ответ 1
Используйте <intent-filter>
с <data>
элемент. Например, чтобы обрабатывать все ссылки на twitter.com, вы поместите это в свой <activity>
в свой AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Затем, когда пользователь нажимает на ссылку на твиттер в браузере, им будет задано вопрос, какое приложение следует использовать для завершения действия: браузер или ваше приложение.
Конечно, если вы хотите обеспечить тесную интеграцию между вашим сайтом и вашим приложением, вы можете определить свою собственную схему:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Затем в своем веб-приложении вы можете поместить такие ссылки, как:
<a href="my.special.scheme://other/parameters/here">
И когда пользователь нажмет на него, ваше приложение будет запущено автоматически (потому что оно, вероятно, будет единственным, которое может обрабатывать тип uris my.special.scheme://
). Единственным недостатком этого является то, что если у пользователя нет установленного приложения, они получат неприятную ошибку. И я не уверен, что есть способ проверить.
Изменить:. Чтобы ответить на ваш вопрос, вы можете использовать getIntent().getData()
, который возвращает объект Uri
. Затем вы можете использовать методы Uri.*
для извлечения необходимых данных. Например, допустим, что пользователь нажал ссылку на http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
Вы можете сделать выше в любом месте вашего Activity
, но вы, вероятно, захотите сделать это в onCreate()
. Вы также можете использовать params.size()
, чтобы получить количество сегментов пути в Uri
. Посмотрите на javadoc или веб-сайт разработчика Android для других методов Uri
, которые вы можете использовать для извлечения определенных частей.
Ответ 2
Все вышеприведенные ответы не работали для меня с CHROME
от 28 января 2014 года
мое приложение запустилось правильно из http://example.com/someresource/ ссылок из таких приложений, как тусовки, gmail и т.д., но не из браузера Chrome.
чтобы решить эту проблему, чтобы он правильно запускался из CHROME, вам нужно установить фильтр намерений, подобный этому
<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:host="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
обратите внимание на элемент pathPrefix
ваше приложение теперь появится в списке действий при каждом запросе http://example.com/someresource/ шаблона из браузера Chrome, щелкнув ссылку из результатов поиска Google или любого другого веб-сайта
Ответ 3
См. мой комментарий здесь: Сделать ссылку в браузере Android, запустить мое приложение?
Мы решительно препятствуем людям использовать свои собственные схемы, если они не определяют новую всемирную интернет-схему.
Ответ 4
В моем случае мне пришлось установить две категории для <intent-filter>
, а затем он работал:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
Ответ 5
Например, у вас есть следующие вещи:
Ссылка, чтобы открыть ваше приложение: http://example.com
Имя пакета вашего приложения: com.example.mypackage
Затем вам нужно сделать следующее:
1) Добавьте в свою активность фильтр намерений (Может быть любая деятельность, которую вы хотите. Для получения дополнительной информации проверьте документация).
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) Создайте HTML файл для проверки ссылки или используйте эти методы.
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) Используйте Mobile Chrome для тестирования
4) Что это.
И его не нужно публиковать приложение на рынке, чтобы проверить глубокое связывание =)
Кроме того, для получения дополнительной информации проверьте документацию и полезную презентацию.
Ответ 6
В фильтр намерений также должен быть добавлен <category android:name="android.intent.category.BROWSABLE"/>
, чтобы правильно распознать действие из ссылки.
Ответ 7
В следующей ссылке приведена информация о запуске приложения (если установлено) непосредственно из браузера. В противном случае он сразу откроет приложение в магазине воспроизведения, чтобы пользователь мог легко загрузить.
Ответ 8
Обратите внимание, что если ваш значок исчезает с панели запуска Android при реализации этой функции, вам нужно разделить фильтр намерений.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="your-own-uri" />
</intent-filter>
</activity>
Ответ 9
Да, поиск в Chrome вместо поиска схемы. Если вы хотите запустить приложение через схему URI, используйте это приложение для приложений в магазине Play. Это спасло мой день:) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Ответ 10
Хамарин порт Феликс ответ
В вашей MainActivity
добавьте это (docs: Android.App.IntentFilterAttribute Class):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin добавит для вас следующее в AndroidManifest.xml
:
<activity android:label="Something" android:screenOrientation="portrait" android:theme="@style/MyTheme" android:name="blahblahblah.MainActivity">
<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="my.special.scheme" />
</intent-filter>
</activity>
И чтобы получить параметры (я проверял в OnCreate of MainActivity):
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
Насколько я знаю, выше можно добавить в любой вид деятельности, а не только MainActivity
Заметки:
- Когда пользователь нажимает на ссылку, ОС Android перезапускает ваше приложение (прервите предыдущий экземпляр, если он есть, и запустите новое), означает, что событие
OnCreate
приложенияMainLauncher Activity
будетMainLauncher Activity
снова. - С помощью этой ссылки:
<a href="my.special.scheme://host/arg1/arg2">
в приведенном выше последнем фрагменте кода значения будут:
scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
Ответ 11
Подход Felix к обработке глубоких ссылок - типичный подход к обработке глубоких ссылок. Я также предлагаю проверить эту библиотеку для обработки маршрутизации и анализа ваших глубоких ссылок:
https://github.com/airbnb/DeepLinkDispatch
Вы можете использовать аннотации, чтобы зарегистрировать свою активность для определенного URI глубокой ссылки, и она выберет параметры для вас, не выполняя обычную ригидность получения сегментов пути, сопоставляя их и т.д. Вы могли бы просто аннотировать и деятельности следующим образом:
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Ответ 12
Эй, я получил решение. Я не задал категорию как "По умолчанию". Также я использовал основное действие для данных о намерениях. Теперь я использую другое действие для данных намерения. Спасибо за помощь.:)
Ответ 13
Вам нужно добавить псевдо-хост-имя в приложение CALLBACK_URL://'не имеет смысла в качестве URL-адреса и не может быть проанализировано.
Ответ 14
example.php:
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
Ответ 15
Смотрите @JRuns ответ здесь. Идея состоит в том, чтобы создать html с вашей пользовательской схемой и загрузить ее где-нибудь. Затем, если вы нажмете на свою собственную ссылку в html файле, вы будете перенаправлены в свое приложение. Я использовал эту статью для Android. Но не забудьте указать полное имя Name = "MyApp.Mobile.Droid.MainActivity"
для вашего целевого действия.
Ответ 16
По состоянию на 15.06.2009
я включил все четыре возможности открыть URL.
т.е. с http
/https
и 2 с префиксом www
и 2 без www
и с помощью этого мое приложение запускается автоматически сейчас без запроса выбора браузера и других опций.
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="example.in" />
<data android:scheme="https" android:host="www.example.in" />
<data android:scheme="http" android:host="example.in" />
<data android:scheme="http" android:host="www.example.in" />
</intent-filter>