Запускать приложение для Android при нажатии на ссылку в SMS

Я не знаю, пробовали ли это многие люди, но я пытаюсь создать приложение, которое требует, чтобы пользователь нажимал ссылку в полученном sms, и это запустит приложение для Android. А в андроиде можно сделать? Если да, то как я могу это сделать? Я знаю, что это можно сделать в iOS. Мы будем благодарны за любые предложения или помощь. Спасибо.


person nishantvodoo    schedule 21.04.2013    source источник


Ответы (3)


В вашем манифесте под действием, которое вы хотите обрабатывать входящие данные от ссылки, нажатой в приложении для обмена сообщениями, определите что-то вроде этого:

<activity android:name=".SomeActivityName" >

    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="com.your_package.something" />
    </intent-filter>

</activity>

android:scheme="" вот что гарантирует, что Activity будет реагировать на любые данные, содержащие это в нем:

<data android:scheme="com.your_package.something" />

В SomeActivityName (Имя используется в качестве иллюстрации. Естественно, вы будете использовать свое собственное :-)) вы можете выполнить проверку следующим образом:

Uri data = getIntent().getData();
String strData = data.toString();
if (strScreenName.equals("com.your_package.something://"))  {
    // THIS IS OPTIONAL IN CASE YOU NEED TO VERIFY. THE ACTUAL USAGE IN MY APP IS BELOW THIS BLOCK
}

Аналогичное использование моего приложения:

Uri data = getIntent().getData();
strScreenName = data.toString()
        .replaceAll("com.some_thing.profile://", "")
        .replaceAll("@", "");

Я использую это для обработки кликов по ссылкам twitter @username в моем приложении. Мне нужно удалить com.some_thing.profile:// и @, чтобы получить имя пользователя для дальнейшей обработки. Код манифеста точно такой же (с измененными только name и scheme).

person Siddharth Lele    schedule 21.04.2013
comment
хорошо, когда я получаю сообщение (например: myapp: // get / 256298xxxx) Предполагается, что в тексте будет выделена часть myapp: // get / 256298xxxx. Но это не так. Как мне решить эту проблему? Как будет запускаться приложение, если часть myapp: // get / 256298xxxx даже не выделяется сама по себе как ссылка для нажатия в тексте - person nishantvodoo; 21.04.2013
comment
@nishan_vodoo: Это потому, что myapp: // get / 256298xxxx не является допустимым URL-адресом для приложения SMS, чтобы проанализировать его и отобразить как ссылку. В лучшем случае он проанализирует числовую последовательность как номер телефона. Вам нужно будет отправить действующий URL-адрес в SMS. Взгляните на конкретный пример: stackoverflow.com/a/3865145/450534. - person Siddharth Lele; 21.04.2013
comment
Спасибо, ребята, что нашли время ответить на мой вопрос. - person nishantvodoo; 21.04.2013
comment
@ Фред: Да. Эта функция работает независимо от подключения. Однако, если для открывающегося действия требуется Интернет, это другое дело. - person Siddharth Lele; 14.12.2016
comment
возможно, правильный вариант - if (strData.equals вместо if (strScreenName.equals - person user2342558; 05.03.2021

Добавьте в свое приложение фильтр намерений, который прослушивает ссылки, следующие за формат, в котором вы хотите, чтобы ваше приложение запускалось.

Однако это будет глобальный прослушиватель, и любая ссылка, которая соответствует формату даже за пределами приложения SMS, будет запускать ваше приложение. Поэтому, если пользователь нажимает аналогичную ссылку в веб-браузере, ваше приложение попытается ответить на нее.

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

person Raghav Sood    schedule 21.04.2013

  <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE"
        <data android:scheme="https" android:host="${hostName}" android:pathPattern="/.*" />
  </intent-filter>

Предыдущие ответы допустимы, но не забудьте указать шаблон.

Подробнее см. здесь.

Также определите свое имя хоста внутри файла Gradle, например:

android {
    defaultConfig {
        manifestPlaceholders = [hostName:"subdomain.example.com"]
    }
}

Дополнительная информация о manifestPlaceholders здесь.

person Rammgarot    schedule 21.11.2017