Post on 04-Dec-2014
description
Arquitectura de comunicación en Android
Intents
Yésica Hernández Jorge Frank
Cesar Aguirre
Comunicación e Intents
Arquitectura de comunicación en Android
Todo en android está formado por agrupaciones de componentes. Cada componente puede ser invocado de manera independiente
Por ejemplo, puedo solicitar acceso a los contactos de la agenda o bien a la lista de archivos multimedia desde cualquier aplicación.
Cada componente esta identificado por su clase o bién si es un archivo por una URI que es un identificador único similar a una url web. Esta comunicación se logra a través de mensajes que son escuchados por el sistema operativo y reenviados a las aplicaciones y componentes destino, como una oficina postal.
Comunicación e Intents
Arquitectura de comunicación en Android
Las actividades, servicios y los receptores de mensajes de difusión se comunican y son invocados mediante mensajes asíncronos llamados Intents y pueden o no esperar una respuesta despues de efectuar la llamada. Permiten invocar actividades de otras aplicaciones Permiten enviar datos mediante un objeto de tipo Bundle que puede contener objetos serializables Los elementos accesibles se pueden referenciar por su nombre de clase + paquete o bien por una URI
Reutilizar funciones de otras apps
Compartimos información
entre Actividades
Comunicación e Intents
Datos
Nombre clase o destino
Activity
Intents a detalle
Comunicación e Intents
Intent
Acción
Datos
Filtros
Resolución Nombre (Explícito)
URI
Bundle
Implícito (por contenido)
Leer
Editar
Componentes de la misma aplicación
Componentes de otras aplicaciones
Responder llamadas
Ejemplos de Intents
Comunicación e Intents
Clase: android.content.Intent
Intent intent = new Intent(this, OtraActividad.class); intent.putExtra(“Valor1", “Hola soy el valor 1"); intent.putExtra("Valor2", “Hola soy el valor 2");
Intent explicito: Enviar datos a otra actividad bien conocida o proceso
Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse("http://unam.mobi") );
Intento implícito, se resuelve por la acción y el tipo de contenido que se obtiene con la URI, responden todas las apps que pueden visualizar el contenido
Enviar un intent
Comunicación e Intents
Las clases que heredan de Activity y Process tienen los siguientes métodos para
Llamar otras aplicaciones o componentes
startActivity(Intent)
Llamar y esperar una respuesta de otras aplicaciones o componentes
startActivityForResult( Intent, A_REQUEST_ID );
Usar el metodo para recibir la respuesta y un switch usando el A_REQUEST_ID
@Override
protected void onActivityResult( int
requestCode, int resultCode, Intent data) {
…
}
Programemos el siguiente código
Comunicación e Intents
Clase: android.content.Intent
Intent compartir = new Intent(Intent.ACTION_SEND); compartir.setType("text/plain"); compartir.putExtra( android.content.Intent.EXTRA_TEXT, “Hola mundo!“ ); startActivity(Intent.createChooser( compartir, “Compartir usando") );
Se lanza el mensaje y se crea un menú para elegir el destinatario por el contexto del contenido.
Recibir los datos de un intent
Comunicación e Intents
Las clases que heredan de Activity y Process tienen los siguientes métodos para
Obtener los datos del Intent recibido
Ya sea que inició la actividad o es resultado de otra comunicación
Bundle extras = getIntent().getExtras();
if (extras == null) {
return;
}
String valor1 = extras.getString("Valor1");
String valor2 = extras.getString("Valor2");
if (valor1 != null && valor2 != null) {
…
}
Filtrado de intents
Filtros
El verdadero poder de los intents recide en el concepto de acciones de los intents.Con estos sólo se describe el tipo de acción que se quiere realizar y opcionalmente los datos sobre los que se quiere llevar el intent La manera en que el sistema identifica el componente que puede responder es a través de la comparación del intent con los ontentfilters que están en el Android Manifest de las demás aplicaciones en el dispositivo. Cuando declaramos un compnente en el manifest, podemos incluir intent filters que declaran las capacidades del componente y así poder responder intents de otras aplicaciones.
Filtrado de intents
Filtros
<intent-filter android:label="@string/resolve_title"> <action android:name="com.android.notepad.action.EDIT_TITLE" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> <data android:mimeType="vnd.android.cursor.item/vnd.google.note" /> </intent-filter>