jueves, 5 de enero de 2012

5.5.- PA - Activitys, intents, views, widgets

5.5.- Programación en Android: Activitys, intents, views, widgets.

En este capítulo hablaré sobre algunos elementos con los que trabajaremos en la programación con Android, algunos de estos elementos, ya los hemos visto en otras plataformas y si no somos nuevos en la programación, también los habíamos utilizado ya. Estos componentes, en el mundo android, tienen unos nombres distintos a los que estamos acostumbrados, y otros son nuevos términos, vamos a verlos con un poco más de detalle:


ACTIVITYs

Las actividades (activities) son los componentes principales de la interfáz gráfica de una aplicación para android. En otros sistemas operativos vendrían siendo las llamadas ventanas. Normalmente se suele definir e implementar una activity para cada ventana o pantalla de nuestra aplicación. Si nuestra aplicación muestra 5 ventanas o Uis distintas, entonces normalmente tendríamos 5 activitys distintas, una controlar cada ventana.(*)
Las activitys pueden ser ejecutadas o lanzadas de distintas formas, como pueden ser:
a) Designando una activity para ser ejecutada (lanzada) en el fichero AndroidManifest.xml.
b) Lanzando una actividad a través del contexto de la aplicación.
c) Lanzando una actividad hija desde una principal esperando un resultado.

a) Designar una activity en el fichero AndroidManifest.xml
Todas las aplicaciones de Android deben designer una actividad para ser lanzada por defecto, esta actividad la definimos en el archivo manifest. Si miramos el manifiesto de nuestra aplicación "Hola Mundo Android", en la pestaña "aplication" veremos lo siguiente:



En esta ventana podemos observar, que nuestra .HolaAndroidActivity, tiene asociado el filtro de Intent tipo Launcher. Éste intent és el que indica cuál es la activity que se lanzará, pero puede haber más de una, como ya veremos.

b) Lanzar las actividades a través del contexto de la aplicación.
Una forma común de lanzar las actividades es utilizando el método startActivity() del contexto de la aplicación, y toma un parámetro llamado Intent. Por ejemplo:

startActivity (new Intent( getApplicationContext(), AyudaActivity.class));

Este intent solicita la ejecución de la activity llamada AyudaActivity a través de su clase. Evidentemente, esta clase debe ser implementada en algún lugar del paquete. Y como la clase AyudaActivity está definida dentro del paquete de la aplicación, debe ser registrada como actividad dentro del archivo manifest.

c) Lanzar una actividad para esperar un resultado
A veces lanzamos las actividades para determinar una elección del usuario y devolver la elección a la actividad que la solicita, en este caso, la actividad puede ser ejecutada utilizando el método Activity.startActivityForResult(). El resultado se devuelve en el parametro Intent de la actividad que llama al método onActivityResult().

Las activitys pueden tener varios estados, ya que pueden ser interrumpidas por otros eventos con más prioridad, como por ejemplo una llamada de teléfono, y aunque puedan ejecutarse varias aplicaciones, sólo una puede estar activa en un determinado momento, osea, sólo una puede estar al frente de la pantalla en un momento determinado.
Las aplicaciones de Android son las responsables del manejo de sus estados, así como de su memoria, recursos y datos. El sistema operativo Android puede finalizar cualquier aplicación que se encuentre pausada, parada o destruida siempre que le haga falta memoria. Esto quiere decir que cualquier actividad que no esté en el frente está sujeta a ser finalizada, así que debemos tener esto en consideración cuando hagamos nuestra aplicación. Veremos estos estados con más detalle en el capítulo "El ciclo de la vida (de una aplicación android)."
Para finalizar una aplicación por nuestra cuenta, podemos hacer una llamada a alguna de las versiones del método finish().

INTENTs

Un intent es un objeto que encapsula la petición de una tarea. Es el elemento básico de comunicación entre los componentes del sistema operativo Android. Otra forma de explicarlo sería diciendo que son como mensajes o solicitudes que se envían los distintos componentes de las aplicaciones.
A través de los intents podemos ejecutar otra actividad, iniciar servicios, mandar mensajes broadcast, ejecutar otras aplicaciones, pasar información a otras actividades... etc.

NOTA: Un mensaje broadcast, es un tipo de mensaje global, que se envía para interactuar con otras aplicaciones que quieran recibirlo. No van destinados a una aplicación en concreto. Las aplicaciones que reciben estos mensajes, deben haber creado un broadcast receiver, que será el componente encargado de escuchar y reaccionar a esos mensajes. Un ejemplo serían los mensajes de "batería baja", que serán atendidos por cualquier aplicación que haya creado un broadcast receiver para ese mensaje. Otro ejemplo de esto lo tenemos en cualquier teléfono que tenga instalados varios programas para abrir ficheros pdf, o varios navegadores. El sistema envía un mensaje de que se quiere abrir este tipo de ficheros y aparece un mensaje que muestra las aplicaciones que responden a él, para que elijamos una.

Intents para pasar datos entre actividades
Los intents, cuando se utilizan para pasar datos entre actividades, deben incluir los datos adicionales dentro del intent. Estos datos se llaman extras.
Para empaquetar datos adicionales con el intent, se utiliza el método putExtra() con el tipo apropiado de objeto que queremos incluir. La convención de android para estos extras es que cada uno sea nombrado con el prefijo del paquete, por ejemplo:
com.blogspot.pafh99.cursoandroid.holaandroid.nombredelosExtras.

Otro ejemplo:

Intent miintent = new Intent (getApplicationContext(), AyudaActivity.class);
miintent.putExtra("com.blogspot.pafh99.cursoandroid.holaandroid.PAGINA", 5);
startActivity (miintent);

Cuando la clase AyudaActivity se lanza, debe ejecutar el método getIntent() para recoger el intent, entonces podremos acceder a la información extra con los métodos adecuados.

Intent intentLlamante=getIntent();
int pagina_de_ayuda = intentLlamante.getIntExtra ("com.blogspot.pafh99.cursoandroid.holaandroid.PAGINA", 1);

En el caso de actividades que comenzasen otras subactividades a traves del método startActivityForResult(), el resultado se pasa como un parámetro en el método onActivityResult() con un parametro de Intent. A partir de ahí podemos extraer y utilizar los datos.

Intents para ejecutar otras aplicaciones.

Normalmente las aplicaciones sólo deberían lanzar las clases de actividades que están definidas dentro de su propio paquete, pero con los permisos adecuados tambien pueden lanzar actividades externas en otras aplicaciones.
Por ejemplo, podríamos crear intents para iniciar ciertas aplicaciones, como puede ser el navegador y pasarle una URL. Lanzar el marcador teléfonico y darle un número de teléfono, etc.
Veamos como lanzar el navegador para ver una URL determinada:

Uri direccion = Uri.parse("http://pafh99.blogspot.com");
Intent navegar = new Intent (Intent.ACTION_VIEW, direccion);
startActivity (navegar);

Con este ejemplo, el navegador se ejecutaría y nuestra aplicación se pondría en pausa, y cuando finalizasemos con el navegador, nuestra aplicación volvería al frente.

VIEWs

Los objetos view son los componentes básicos con los que construimos la interfáz gráfica de nuestra aplicación, equivalen a los controles en otros lenguajes visuales.
Una vista (View) ocupa un área rectangular de la pantalla y es responsable de dibujarla y de controlar sus eventos. Es la clase base para los widgets, que son los que se utilizan para crear los componentes interactivos de la interfaz de usuario. La subclase ViewGroup es la clase base para los layouts, que son contenedores indivisibles que pueden contener otras vistas (Views) o grupos de ellas (ViewGroup) y definen sus propiedades de disposición (layout)
Un ejemplo de estos serían los botones, las listas desplegables, imágenes, etc. El sistema operativo tiene unos cuantos, aunque también podemos crear o personalizar unos propios.

Un objeto view representa un widget que tiene una apariencia en pantalla. Ejemplos:
Views Básicos: Usados comunmente, como: TextView, EditText, Button...
Views de selección (Picker): como los vistas (views): TimePicker, DatePicker
Views de Lista: Muestran listas de elementos: ListView, Spinner....
Views de display: Muestran imágenes: Fallery, ImageSwitcher...
Views de menús: Muestran elementos adicionales o sensibles al contexto.
Views adicionales: otras vistas como pueden ser: AnalogClock y DigitalClock.

Ya los iremos viendo con más detalle a medida que comenzemos a desarrollar nuestra aplicación.

WIDGETs
Con los widgets podemos tener algo de confusión, ya que en Android nos podemos referir a dos cosas, los widgets como subclase de View (botones, listas desplegables, etc), o los widgets como las aplicaciones que tenemos en el escritorio del móvil (como el relój, un calendario, etc...). Podemos agregarlos pulsando por un tiempo en la pantalla del móvil (o del emulador).
Los widgets de aplicaciones serían por ejemplo, los siguientes (1), (2) y (3):



Y los widgets, como subclases de View, osea elementos de la interfaz de usuario, serían los siguientes:






Ver. 1.0 – Revisión 5.1.2012

No hay comentarios:

Publicar un comentario