So che questo è già stato richiesto più volte in StackOverflow, ma non ho ancora trovato una soluzione. La mia app invia un'email con un link al suo interno che, una volta cliccata, dovrebbe lanciare l'app.Avvio della mia app utilizzando l'URI di intento
Secondo @hackbod, il modo migliore per farlo è utilizzare l'URI Intent (vedere this). Ecco il mio codice che imposta l'intento e lo mette nel corpo dell'e-mail:
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();
}
Questo è quello che ricevo da 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>.
Quando osservo l'e-mail dal mio telefono utilizzando l'applicazione GMail, Posso fare clic sul link di Google e avvia il browser, nessun problema con quello.
Ma il collegamento per l'intento non è nemmeno cliccabile (mentre dal progetto sembra che sia dovrebbe essere cliccabile). Qualcuno ha provato e ha funzionato?
EDIT # 1: Ho anche provato impostando l'azione Intent.ACTION_VIEW ma il link non è ancora cliccabile.
MODIFICA n. 2: Apparentemente, il collegamento in realtà è selezionabile. Ho provato a utilizzare un altro client di posta elettronica e i collegamenti sono selezionabili! Sembra che ci sia un bug in GMail. Oh bene. Ma a quanto pare, questo è più difficile di quanto pensassi. Ho provato ad utilizzare:
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);
Come suggerito da @CommonsWare, ho provato a controllare se ci sono ricevitori di questo customIntent
. Apparentemente ce n'è uno, che è quello che mi aspettavo. Quindi il prossimo passo è rendere questo intento in un URI che posso usare nell'e-mail. Ho usato:
String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);
che, basato sulla mia comprensione della documentazione, dovrebbe darmi qualcosa come i soliti link http, solo con lo schema impostato intent
. Posso quindi utilizzare questo customUri
come valore per i collegamenti nell'e-mail. MA, sembra che questo non sia il caso. Qualcuno ha un esempio di cosa deve restituire .toUri
?
Questo sta diventando lungo, ma penso di aver trovato il problema. Questo è l'intento che voglio che il collegamento spawn: 'Intent {act = com.test.project.action.CUSTOM_ACTION dat = com.test.project: //my.authority}'.Invece, sto ottenendo questo intento quando clicco sul link nell'email: 'Intent {act = android.intent.action.VIEW dat = intent: //my.authority#Intent; scheme = com.test.project; action = com.test.project.action.CUSTOM_ACTION; end (ha extra)} '. Basato sulla documentazione Intent.parseUri (String uri, int flags), il client di posta elettronica interpreta il mio URI come * NOT * generato da toUri(). La mia ipotesi è corretta? – Zarah
sei riuscito a far funzionare questo e qual era la soluzione? Grazie! – hopia
@hopia Non ci ho provato più a lungo. Puoi guardare i commenti tra me e CommonsWare qui sotto per esaminare i miei risultati durante le indagini. Puoi anche provare la nuova risposta qui sotto (non l'hai ancora provata). :) – Zarah