Запуск пользовательского приложения для 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 или любого другого веб-сайта

Ответ 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

В следующей ссылке приведена информация о запуске приложения (если установлено) непосредственно из браузера. В противном случае он сразу откроет приложение в магазине воспроизведения, чтобы пользователь мог легко загрузить.

https://developer.chrome.com/multidevice/android/intents

Ответ 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

Заметки:

  1. Когда пользователь нажимает на ссылку, ОС Android перезапускает ваше приложение (прервите предыдущий экземпляр, если он есть, и запустите новое), означает, что событие OnCreate приложения MainLauncher Activity будет MainLauncher Activity снова.
  2. С помощью этой ссылки: <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>