Wiem, że to było już wiele razy zadawane w StackOverflow, ale jeszcze nie znalazłem rozwiązania. Moja aplikacja wysyła e-mail z linkiem, który po kliknięciu powinien uruchomić aplikację.Uruchamianie aplikacji za pomocą intencji URI
Według @hackbod, najlepszym sposobem, aby to zrobić, jest skorzystanie z URI Intent (patrz this). Tu jest mój kod, który ustawia intencję i umieszcza go w organizmie email:
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();
}
To, co dostaję od 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>.
Kiedy przeglądać wiadomości e-mail od mojego telefonu za pomocą aplikacji Gmail Mogę kliknąć link Google i uruchamia przeglądarkę, nie ma problemu z tym.
Ale link do intencji nie jest nawet możliwy do kliknięcia (podczas gdy z wersji roboczej wygląda na to, że powinien być klikalny na). Czy ktoś próbował tego i sprawił, że działa?
EDIT # 1: Próbowałem również ustawienie działania do Intent.ACTION_VIEW ale link nadal nie jest klikalny.
EDYCJA # 2: Wygląda na to, że link naprawdę jest klikalny na. Próbowałem użyć innego klienta poczty e-mail, a linki są klikalne! Wygląda na to, że istnieje błąd w Gmailu. No cóż. Ale widocznie jest to trudniejsze, niż myślałem. Próbowałem za pomocą:
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);
Jak sugeruje @CommonsWare, próbowałem sprawdzając czy są odbiorcami tego customIntent
. Wygląda na to, że jest jeden, czego się spodziewałem. Następnym krokiem jest uczynienie tego zamiaru identyfikatorem URI, którego mogę użyć w wiadomości e-mail. Użyłem:
String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);
, które w oparciu o moje rozumienie dokumentacji, powinien dać mi coś podobnego zwykłych linków http, tylko z systemem ustawionym na intent
. Mogę następnie użyć tego customUri
jako wartości dla linków w e-mailu. ALE, wygląda na to, że tak nie jest. Czy ktokolwiek ma przykład tego, co musi powrócić do tego, co musi być .toUri
?
Trwa to długo, ale myślę, że znalazłem problem. To jest intencja Chcę, aby link się odrodził: 'Intent {act = com.test.project.action.CUSTOM_ACTION dat = com.test.project: //my.authority}'.Zamiast tego otrzymuję ten zamiar po kliknięciu łącza w wiadomości e-mail: 'Intent {act = android.intent.action.VIEW dat = intent: //my.authority#Intent; scheme = com.test.project; action = com.test.project.action.CUSTOM_ACTION; end (ma dodatki)} '. W oparciu o dokumentację Intent.parseUri (String uri, int flags) klient poczty e-mail interpretuje mój URI jako * NOT * generowany przez toUri(). Czy moje założenie jest poprawne? – Zarah
czy byłeś w stanie to uruchomić i jakie było rozwiązanie? Dzięki! – hopia
@hopia Nie próbowałem tego od dłuższego czasu. Możesz spojrzeć na komentarze między mną a CommonsWare poniżej, aby przyjrzeć się moim odkryciom podczas dochodzenia. Możesz również wypróbować nowszą odpowiedź poniżej (jeszcze jej nie wypróbowałeś). :) – Zarah