Я знаю, что об этом уже много раз спрашивали в 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,
Testing intents from an email.
A standard website: Go to Google.
This link should launch the app: Click link to launch.
Когда я просматриваю почту со своего телефона с помощью приложения GMail, Я могу нажать на ссылку Google, и она запускает браузер, с этим проблем нет.
Но ссылка на намерение даже не активируется (хотя из черновика похоже, что должен быть активным) , Кто-нибудь пробовал это и заставил это работать?
РЕДАКТИРОВАТЬ # 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
должно вернуть?
Вы можете попробовать заключать URL-адреса в кавычки в своих элементах , поскольку именно так должен работать HTML написано.
Вы также можете попробовать подтвердить через parseUri()
, PackageManager
и queryIntentActivities()
, если ваш сгенерированный URL-адрес разрешается во что-то -- если он нет, то есть проблема с URL.
Вот пример проекта, демонстрирующий использование URI_INTENT_SCHEME
, на случай, если он даст вам какие-либо идеи.