viernes, 18 de septiembre de 2009

Brew: Manejo de Eventos vs Loop

Comenzando a desarrollar en brew, me encontre con el siguiente problema: Todo se maneja por eventos. Al contrario de J2ME, donde generabamos la tipica estructura de loop infinito con un sleep en el medio, la unica opcion en brew es setear un timer.

Si el SO del telefono detecta (o mejor dicho sospecha) que la aplicacion deja de responder, para la ejecucion y fuerza un reinicio. Debido a esto es imposible utilizar while (true) o algo por el estilo...

Para setear un timer, utilizamos la funcion:

int ISHELL_SetTimer
(
IShell * pIShell,
int32 dwMSecs,
PFNNOTIFY pfn,
void * pUser
);


Los parametros serian: un puntero a la interface iShell, cantidad de milisegundos del timer, un puntero a la funcion callback que sera llamada por el timer, y por ultimo un void pointer que sera pasado como parametro cuando se llame al callback.

Los valores de retorno son AEE_SUCCESS, AEE_EBADPARM, AEE_ENOMEMORY.

La funcion que definamos como callback, debe tener, obviamente, como unico parametro un void * y no retornar ningun valor.

Una cosa mas a tener en cuenta, es que la llamada al callback es por unica vez, asi que si necesitamos que se ejecute constantemente, debemos re setear el timer adentro del mismo callback.


La mayoria de los telefonos despues de permanecer cierto tiempo sin que se presione alguna tecla, entran en un estado de IDLE o SLEEP. Si necesitamos evitar esto necesitamos handlear el evento de la siguiente manera:



case EVT_APP_NO_SLEEP:
//Don't want to sleep
return TRUE;

lunes, 14 de septiembre de 2009

Como configurar el SDK de Android en MAC OS X



Descargamos el Eclipse y el sdk de Android. Descomprimimos ambos programas en la carpeta que consideremos oportuna. Abrimos una ventana de terminal y ejecutamos el siguiente comando:

>pico .bash_profile


Esto nos abre el archivo .bash_profile un editor de texto (Creandolo en caso de ser necesario). Ahi dentro ingresamos el siguiente comando:

export PATH=${PATH}:"Android SDK path"/tools


Reemplazando obviamente el path del SDK. si bien este paso no es necesario, nos vas a ser de gran utilidad para ejecutar el debugger posteriormente.

Ejecutamos Eclipse, y realizamos lo siguiente:



1) Vamos a Help>Software Updates
2) En el tab Available Software cliqueamos en Add site
3) En el cuadro de dialogo tipeamos https://dl-ssl.google.com/android/eclipse/
4) Pulsamos OK, y tildamos en la lista Developer Tools
5) Pulsamos install y posteriormente
6) Volvemos a ingresar a Help>Software Updates
7) Instalamos Android DDMS
8) Reiniciamos Eclipse
9) En Preferencias Navegamos hasta la seccion Android y seleccionamos el path del SDK
10) Aplicamos la configuracion



Los pasos estan redactados para la version 3.4.0 (GANYMEDE) . En la 3.5.0 (GALILEO) el menu Help>Software Updates cambio por Help > Install New Software

Para chequear que todo este bien instalado, probamos con uno de los proyectos incluidos en la carpeta Samples del SDK.
Una vez compilado el programa, para ejecutarlo, necesitamos crear un Android Virtual Device (AVD).

Para ello vamos a Window > Android AVD Manager. Ahi veremos la lista de devices vacia. Creamos el device seleccionando el Target y el Skin que queramos. Con esto ya podemos hacer clic en el boton de play del eclipse y seleccionar el AVD que hayamos creado.