Programación de intents o acciones
Para poder realizar determinadas acciones dentro de Android se utilizan los objetos intents mediante la asignación objeto – acción. Existen diferentes tipos de intents: implícitos y explícitos
Los explícitos son aquellos que definen todos sus componentes en la definición del objeto. Mientras que los implícitos realizan una actividad genérica que tendría que ser terminada por una segunda aplicación
Algunos ejemplo de intents son:
Arrancar una segunda actividad
1 2 |
Intent i = new Intent(ClaseOrigen, ClaseDestino); startActivity(i); |
Además de arrancar una segunda actividad, también se le puede pasar una serie de datos junto con la comunicación. Para ello se utilizan los métodos putTipo() donde como parámetros se pasan la clave asociada y el objeto que se quiere pasar.
1 2 |
Intent i = new Intent(MainActivity.this, SecondActivity.class); i.putExtra("clave","palabra a enviar"); |
Para recuperar el dato en la clase destino se realiza mediante la captura del intent y los extras asociados
1 2 |
Bundle b = getIntent().getExtras(); String datoRecuperado = b.getString("clave"); |
Existe una segunda variante a la hora de arrancar la actividad que es arrancarla esperando una respuesta. La primera parte se realiza de la misma forma, tanto el envío como la recepción de los datos, con la excepción que se usa el método startActivityForResult()
1 2 3 4 |
Intent i = new Intent(MainActivity.this, SecondActivity.class); i.putExtra(TAG_ENVIO, "dato"); //donde 1 es el código de envío que más adelante será evaluado startActivityForResult(i,1); |
En la segunda activity se usará el método setResult() para asociar un resultado a pasar a la primera actividad
1 2 3 |
// donde 1 es el código de retorno e i el intento con los datos que se quieren devolver setResult(1,i); finish |
Una vez obtenido el resultado la sobreescritura del método onActivityResult() evalúa y procesa el resultado en la primera actividad
1 2 3 4 5 6 |
//requestCode es el código que con el que se ha enviado la petición, //resultCode es el código con el que se ha obtenido el resultado //y data el conjunto de datos que se han devuelto protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } |
Realizar tareas implícitas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
public void abrirWeb() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.developandsys.es")); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void llamadaTelefono() { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:612345678")); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void buscarGoogle() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("geo:37.34513,-0.34551")); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void abrirCamaraFoto() { Intent intent = new Intent("MediaStore.ACTION_IMAGE_CAPTURE"); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void mandarCorreo() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, "asunto"); intent.putExtra(Intent.EXTRA_TEXT, "texto del correo"); intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"info@developandsys.es"}); startActivity(intent); } public void anadirEventoCalendaroi(String title, String location, Calendar begin, Calendar end) { Intent intent = new Intent(Intent.ACTION_INSERT) .setData(CalendarContract.Events.CONTENT_URI) .putExtra(CalendarContract.Events.TITLE, title) .putExtra(CalendarContract.Events.EVENT_LOCATION, location) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void anadirAlarma(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_HOUR, hour) .putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void anadirContacto(String name, String email) { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); intent.putExtra(ContactsContract.Intents.Insert.NAME, name); intent.putExtra(ContactsContract.Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } |