Не удается запустить приложение Android из SMS-сообщения - браузер Android всегда выполняет задачу - PullRequest
1 голос
/ 28 апреля 2011

Мне бы хотелось, чтобы мое приложение запускалось, когда пользователь нажимает на ссылку, например, http://myapp.com, которая встроена в SMS-сообщение.

Я следовал этому [решению], но он не работает для меня. Эмулятор постоянно открывает браузер.

Вот фильтр намерений:

<intent-filter>    
    <action android:name="android.intent.action.VIEW" />    
    <category android:name="android.intent.catagory.DEFAULT"/> 
    <category android:name="android.intent.catagory.BROWSABLE"/>    
    <data android:host="myapp.com" android:scheme="http" />
</intent-filter>

Я также пытался увеличить приоритет фильтра намерений, чтобы перехватить намерение перед браузером, используя тег android:priority = 100, но это ничего не изменило. Таким образом, либо этот приоритет недостаточно высок, либо фильтр намерений не совпадает с самого начала.

Вот намерение, которое система вещает сразу после нажатия на ссылку. Это дало:

04-27 13:03:22.905: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.VIEW dat=http://myapp.com cmp=com.android.browser/.BrowserActivity}

Я предполагаю, что Android выбирает браузер по умолчанию при каждой отправке этого намерения. Интересно, есть ли что-нибудь связанное с атрибутом cmp. Можем ли мы изменить это? Иначе, как мы можем перехватить намерение перед браузером?

Любые советы приветствуются. Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

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

В этот раз цель трансляции также отличается:

04-29 12:42:22.906: INFO/ActivityManager(63): Starting activity: Intent { act=android.intent.action.VIEW dat=http://www.my.com flg=0x80000 cmp = android / com.android.internal.app.ResolverActivity (has extras) }

Атрибут компонента изменился!Поэтому я действительно думаю, что это связано с версией эмулятора.

0 голосов
/ 28 апреля 2011

Разве ваш android: схема ссылки на ваше приложение вместо http?

<data android:scheme="myapp"/> 

Посмотрите эти вопросы о Stackoverflow для получения дополнительной информации (я думаю, что вы имели в виду ссылку на один из них в своем вопросе, где вы говорите "[решение]"):
Как зарегистрировать некоторое пространство имен URL (myapp: //app.start/) для доступа к вашей программе, вызывая URL в браузере в ОС Android?
Как реализовать собственную схему URI на Android

Вы пытались вызвать метод setPackage , как описано в одном из этих ответов?

Обновление: Я думаю, что вы можете достичь этого, используя две схемы, возможно, что-то вроде этого:

<data android:scheme="myapp" android:host="launch" android:pathPrefix="/" />
<data android:scheme="http" android:host="myapp" android:pathPrefix="/launch/" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...