sesion - Intención de Android para abrir Waze y Google maps
waze iniciar sesion (3)
Hay algunas publicaciones similares pero no pude encontrar una exacta. Básicamente, quiero abrir ambos mapas de Google y Waze con la misma intención. Al principio intenté esto:
final String uri = String.format(Locale.ENGLISH, "geo:%f,%f", latitude, longitude);
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
Waze navegó directamente a la ubicación correcta y Google Maps abrió el lugar correcto. luego me di cuenta de que los mapas de Google no ponen un pin en la ubicación, por lo que es difícil para el usuario saber dónde está exactamente. Así que miré a mi alrededor y me di cuenta de que los mapas de Google requieren "? Q = .. (etiqueta)" para eso ... Cambié la construcción de uri a:
final String uri = String.format(Locale.ENGLISH, "geo:%f,%f?q=%f,%f (%s)", latitude, longitude, latitude, longitude, name);
Pero luego Waze hizo 2 cosas: navegó al lugar correcto Y realizó una búsqueda en la etiqueta. Esto obligó al usuario a hacer clic en el botón Atrás para cerrar la pantalla de resultados de búsqueda y continuar con la navegación hacia el lugar correcto.
Busqué una respuesta en todas partes, pero no encontré una solución que logre ambas. Al principio pensé que no es posible y Waze tiene un error ... pero luego me di cuenta de que Facebook Messenger está haciendo exactamente lo que quiero. al hacer clic en un mensaje con una ubicación, se abrirán ambas aplicaciones: los mapas de Google tendrán un pin (con una etiqueta) y Waze navegará directamente a esa ubicación sin realizar una búsqueda.
Algunas preguntas sobre lo anterior: 1. (Por supuesto) ¿Cómo puedo lograr eso? 2. ¿Cómo puedo saber cómo se está construyendo la intención del mensajero de Facebook? (¿Puedo verlo de todos modos) 3. ¿Cuál es la razón detrás de tener la etiqueta solo con "? Q = .."?
Gracias
Mi solución final para abrir las aplicaciones Waze y GoogleMap para obtener orientación (funciona como un encanto):
String uri = "";
Intent intent;
try {
uri = String.format(Locale.ENGLISH,"geo:" + location.getLat() + "," +location.getLng() + "?q=" + location.getLat()+","+location.getLng()+" ("+location.getName()+")");
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (ActivityNotFoundException ex) {
try {
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
} catch (ActivityNotFoundException innerEx) {
getSnackbar(getResources().getString(R.string.map_install_application), Snackbar.LENGTH_LONG).show();
}
}
No importa. Pude interceptar el mensajero de Facebook con la siguiente aplicación y pensé que la URI debería ser la siguiente:
String.format(Locale.ENGLISH, "geo:0,0?q=") + android.net.Uri.encode(String.format("%s@%f,%f", label, latitude, longitude), "UTF-8");
Gracias
Siguiendo la sugerencia de Nimrod, instalé la aplicación e intercepté la intención de la función de ubicación de whatsapp. Aquí está la intención completa probada en mapas y waze:
String uri = "http://maps.google.com/maps?q=loc:"+latitude+","+longitude+" ("+label+")";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
intent.setData(Uri.parse(uri));
startActivity(intent);