Uso de intenciones en Mis Lugares
Ejercicio: Intenciones implícitas en Mis Lugares
1. Si has hecho el ejercicio Casos de Uso para lugares, en la clase CasosUsoLugar añade cuatro nuevos casos de uso: Si no añádelos a la clase VistaLugarActivity.
// INTENCIONES public void compartir(Lugar lugar) { Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(Intent.EXTRA_TEXT, lugar.getNombre() + " - " + lugar.getUrl()); actividad.startActivity(i); } public void llamarTelefono(Lugar lugar) { actividad.startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + lugar.getTelefono()))); } public void verPgWeb(Lugar lugar) { actividad.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(lugar.getUrl()))); } public final void verMapa(Lugar lugar) { double lat = lugar.getPosicion().getLatitud(); double lon = lugar.getPosicion().getLongitud(); Uri uri = lugar.getPosicion() != GeoPunto.SIN_POSICION ? Uri.parse("geo:" + lat + ',' + lon) : Uri.parse("geo:0,0?q=" + lugar.getDireccion()); actividad.startActivity(new Intent("android.intent.action.VIEW", uri)); }
// INTENCIONES fun compartir(lugar: Lugar) = actividad.startActivity( Intent(Intent.ACTION_SEND).apply { type = "text/plain" putExtra(Intent.EXTRA_TEXT, "$(lugar.nombre) - $(lugar.url)") }) fun llamarTelefono(lugar: Lugar) = actividad.startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + lugar.telefono))) fun verPgWeb(lugar: Lugar) = actividad.startActivity( Intent(Intent.ACTION_VIEW, Uri.parse(lugar.url))) fun verMapa(lugar: Lugar) { val lat = lugar.posicion.latitud val lon = lugar.posicion.longitud val uri = if (lugar.posicion != GeoPunto.SIN_POSICION) Uri.parse("geo:$lat,$lon") else Uri.parse("geo:0,0?q=" + lugar.direccion) actividad.startActivity(Intent(Intent.ACTION_VIEW, uri)) }
El segundo método realiza una llamada telefónica al número del lugar. El tercero abre su página Web. El cuarto obtiene la latitud y longitud del lugar. Si alguna de las dos es distinta de cero, consideraremos que se ha introducido esta información y crearemos una URI basada en estos valores. Si son cero, consideraremos que no se han introducido, por lo que crearemos una URI basándonos en la dirección del lugar.
2. En la clase VistaLugarActivity hay que llamar a dos de estos métodos desde el menú. En el método onOptionsItemSelected() añade el código subrayado:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.accion_compartir: usoLugar.compartir(lugar); return true; case R.id.accion_llegar: usoLugar.verMapa(lugar); return true; …
override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.getItemId()) { R.id.accion_compartir -> { usoLugar.compartir(lugar) return true } R.id.accion_llegar -> { usoLugar.verMapa(lugar) return true } …
NOTA: Si no has hecho el ejercicio Casos de Uso para lugares, elimina usoLugar.
3. Ejecuta la aplicación, selecciona alguno de los lugares y utiliza la barra de acciones para verificar estas opciones. Para verificar la segunda opción, es importante que el terminal disponga de algún software de mapas (como Google Maps).
4. Abre el layout vista_lugar.xml. Localiza el LinearLayout que contiene el icono y el texto con la dirección. Añade el atributo onClick como se muestra a continuación:
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:onClick="verMapa"> <ImageView android:layout_width="40dp" android:layout_height="40dp" android:contentDescription="logo de la dirección" android:src="@android:drawable/ic_menu_myplaces" /> …
5. Añade también el atributo onClick en los LinearLayout que contienen el teléfono y la URL utilizando el método adecuado.
6. Añade a VistaLugarActivity los siguientes métodos:
public void verMapa(View view) { usoLugar.verMapa(lugar); } public void llamarTelefono(View view) { usoLugar.llamarTelefono(lugar); } public void verPgWeb(View view) { usoLugar.verPgWeb(lugar); }
fun verMapa(view: View) = usoLugar.verMapa(lugar) fun llamarTelefono(view: View) = usoLugar.llamarTelefono(lugar) fun verPgWeb(view: View) = usoLugar.verPgWeb(lugar)
NOTA: Si no has hecho el ejercicio Casos de Uso para lugares, elimina usoLugar.
7. Verifica el funcionamiento de las nuevas intenciones implícitas.