2016-07-12 3 views
2

Например, есть URI пример: // activityone Foo = бар, который может открыть приложение и запустить одну из деятельности этой команды ADBКак открыть глубокую ссылку uri на Android?

adb shell am start -W -a android.intent.action.VIEW -d "example://activityone?foo=bar" com.example.deeplinking 

Есть ли другие способы запуска? приложение для Android через этот uri (пример: // activityone? foo = bar)? Как я могу поместить этот uri в электронное письмо, и когда он будет нажат, он запустит приложение?

+0

'' link

+0

Это не работает, когда встроенное в электронной почте –

+0

Для совместимости электронной почты, использовать реальные Deeplink или хромовые намерения: https://developer.chrome.com/multidevice/android/intents –

ответ

1

Нестандартные схемы URL (это то, что example://) не всегда рассматриваются как ссылки. Ваш лучший способ - каким-то образом обернуть этот URL-адрес внутри ссылки, которую приложение МОЖЕТ распознать (http:// или https://), а затем позаботьтесь о том, чтобы открыть свое приложение позже, обычно с помощью своего рода автоматического перенаправления. Вот как мы справляемся с тем, чтобы приложение всегда запускало независимо от того, где открывается ссылка.

5

Во-первых, вы должны прочитать документацию для этого: Intents and Intent Filters. В частности, раздел «Получение неявного намерения».

Как указывали другие, использование специальной схемы для этого имеет проблемы.

  • Они не всегда рассматриваются как ссылки
  • Вы не владеете им, как у вас есть доменное имя (хоста).

Таким образом, вы должны определить активность в вас манифесте с намерением фильтра для хоста и использовать реальную схему. См. Разделы «Тестирование действий», «Тест категории» и «Проверка данных» документации Intent & Intent Filters, чтобы узнать, как настроить это для вашего конкретного варианта использования.

<activity android:name="com.example.app.ActivityOne"> 
    <intent-filter> 
     <data android:scheme="http"/> 
     <data android:host="example.com"/> 
     <data android:path="/activityone"/> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
    </intent-filter> 
</activity> 

Тогда вы сможете использовать ссылку, как показано ниже.

http://example.com/activityone?foo=bar 

Поскольку это ссылка HTTP система предложит пользователю выбрать приложение, чтобы открыть его (приложение или предпочитаемого браузера). Если они выберут ваше приложение, он запустит ActivityOne, который может получить данные запроса так.

public class ActivityOne extends Activity { 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Intent intent = getIntent(); 
     Uri uri = intent.getData(); 
     String foo = uri.getQueryParameter("foo"); 
    } 

} 

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

+0

Как я могу поместить этот uri в электронную почту, и когда он будет нажат, он запустит приложение? –

+0

Я обновил свой ответ, чтобы включить только ссылку и дополнительную информацию о процессе выбора/запуска приложения при его нажатии. Вы можете отправить его себе по электронной почте для проверки. – mpkuth

+0

Если вы используете gmail (и, возможно, другие почтовые клиенты), вам нужно явно указать, что вы хотите 'http://example.com/activityone?foo = bar' следует рассматривать как ссылку, а не простой текст. Выделите текст и нажмите «Вставить ссылку» на панели инструментов вниз кнопкой отправки. – mpkuth