Sé que esto ya se ha pedido muchas veces en StackOverflow, pero aún no he encontrado una solución. Mi aplicación envía un correo electrónico con un enlace que, cuando se pulsa, debe iniciar la aplicación.Lanzamiento de mi aplicación usando el URI intencionado
De acuerdo con @hackbod, la mejor manera de hacerlo es hacer uso del URI intencionado (ver this). Aquí está mi código que establece la intención y lo pone en el cuerpo del correo electrónico:
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();
}
Esto es lo que recibo de 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>.
Cuando veo el correo electrónico de mi teléfono mediante la aplicación de Gmail, Puedo hacer clic en el enlace de Google y se inicia el navegador, no hay problema con eso.
Pero el enlace para la intención ni siquiera se puede hacer clic (Mientras que desde el borrador parece se debe hacer clic en). ¿Alguien ha intentado esto y lo ha hecho funcionar?
editar # 1: También he intentado fijar la acción a Intent.ACTION_VIEW pero el enlace todavía no se puede hacer clic.
EDIT # 2: Aparentemente, el enlace realmente es clicable. ¡Intenté usar otro cliente de correo electrónico y se puede hacer clic en los enlaces! Parece que hay un error en GMail. Oh bien. Pero aparentemente, esto es más difícil de lo que pensaba. He intentado utilizar:
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);
Como sugiere @CommonsWare, he intentado comprobar si existen receptores de este customIntent
. Aparentemente hay uno, que es lo que esperaba. El próximo paso es convertir este intento en un URI que pueda usar en el correo electrónico. Solía:
String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME);
el cual, basado en mi comprensión de la documentación, me diera algo así como los enlaces http habituales, sólo con el esquema que figura a intent
. Entonces puedo usar este customUri
como el valor de los enlaces en el correo electrónico. PERO, parece que este no es el caso. ¿Alguien tiene un ejemplo de lo que debe devolver .toUri
?
Esto se está volviendo largo, pero creo que he encontrado el problema. Esta es la intención que deseo que genere el enlace: 'Intención {act = com.test.project.action.CUSTOM_ACTION dat = com.test.project: //my.authority}'.En cambio, obtengo este Intento cuando hago clic en el enlace del correo electrónico: 'Intención {act = android.intent.action.VIEW dat = intención: //mi.autoridad#Intenta; esquema = com.prueba.proyecto; acción = com.test.project.action.CUSTOM_ACTION; end (tiene extras)} '. Basado en la documentación de Intent.parseUri (String uri, int flags), el cliente de correo electrónico está interpretando mi URI como * NOT * generado por toUri(). ¿Mi suposición es correcta? – Zarah
¿fue capaz de hacer que esto funcione y cuál fue la solución? ¡Gracias! – hopia
@hopia No lo he intentado de nuevo en mucho tiempo. Puede ver los comentarios entre mí y CommonsWare a continuación para ver mis hallazgos durante la investigación. También puede probar la respuesta más nueva a continuación (aún no la he probado). :) – Zarah