Запуск моего приложения с помощью целевого URI - PullRequest
7 голосов
/ 25 августа 2010

Я знаю, что об этом уже много раз спрашивали в StackOverflow, но я пока не нашел решения.Мое приложение отправляет электронное письмо со ссылкой на него, которое при нажатии должно запустить приложение.

В соответствии с @hackbod, лучший способ сделать это - использовать Intent URI (см. this ).Вот мой код, который устанавливает намерение и помещает его в тело письма:

Intent customIntent = new Intent(CUSTOM_ACTION);
customIntent.setPackage(MY_PACKAGE);
customIntent.addCategory(MY_CAT_BROWSABLE);
customIntent.addCategory(MY_CAT_DEFAULT);

String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);

String emailBody = getString(R.string.intent_link, customUri);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_SUBJECT, "Recommending vid");
intent.putExtra(Intent.EXTRA_TEXT   , Html.fromHtml(emailBody));
try {
    startActivity(Intent.createChooser(intent, "Choose email client:"));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

Это то, что я получаю из LogCat:

08-25 17:01:23.333: VERBOSE/Test URI(16987): intent:#Intent;action=com.test.project.action.VIEW_VID_FROM_LINK;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.test.project;end
08-25 17:01:23.338: VERBOSE/Test email text(16987): Hi,<br><br>Testing intents from an email.<br><br> A standard website: <a href=http://www.google.com>Go to Google</a>.<br><br> This link should launch the app: <a href=intent:#Intent;action=com.test.project.action.VIEW_VID_FROM_LINK;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.test.project;end>Click link to launch</a>.

Когда я просматриваю почту со своего телефона, используяПриложение GMail, я могу нажать на ссылку Google, и оно запускает браузер, с этим проблем нет.

Но ссылка на намерение даже не активируется (хотя из черновика это выглядит как должно быть кликабельно).Кто-нибудь пробовал это и заставил это работать?

From draft: link looks clickableSent email: link not clickable

РЕДАКТИРОВАТЬ # 1: Я также попытался установить действие для Intent.ACTION_VIEW, но ссылка по-прежнему не нажимается.

РЕДАКТИРОВАТЬ # 2: Судя по всему, ссылка действительно кликабельна.Я попытался использовать другой почтовый клиент, и ссылки кликабельны!Похоже, в GMail есть ошибка.Ну что ж.Но, видимо, это сложнее, чем я думал.Я попытался использовать:

Uri.Builder builder = new Uri.Builder();
builder.scheme("my.own.scheme");
builder.authority("my.authority");
Uri newUri = builder.build();
Intent customIntent = new Intent(CUSTOM_ACTION, newUri);

Как предложено @CommonsWare, я попытался проверить, есть ли получатели этого customIntent.Видимо, есть один, который я ожидал.Поэтому следующий шаг - превратить это намерение в URI, который я могу использовать в письме.Я использовал:

String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);

, который, исходя из моего понимания документации, должен давать мне что-то вроде обычных ссылок http, только со схемой, установленной на intent.Затем я могу использовать это customUri в качестве значения для ссылок в электронном письме.НО, похоже, это не тот случай.У кого-нибудь есть пример того, что .toUri должен вернуть?

Ответы [ 2 ]

4 голосов
/ 25 августа 2010

Вы можете попробовать заключить в кавычки ваши URL-адреса в элементах <a>, так как HTML-код должен быть написан.

Вы также можете попытаться подтвердить, с помощью parseUri(), PackageManager и queryIntentActivities(), если ваш сгенерированный URL-адрес разрешается, а если нет, то проблема с URL-адресом.

Вот пример проекта , показывающий использование URI_INTENT_SCHEME, на случай, если он даст вам какие-либо идеи.

3 голосов
/ 06 июня 2011

Используйте нулевой флаг для создания URI с вашей пользовательской схемой. Intent.URI_INTENT_SCHEME флаг заставляет использовать схему "intent:" (и общий ненормальный синтаксис URI намерений).

String customUri = customIntent.toUri(0);
...