Monday, April 28, 2008

Problemas Diseño

En el diseño de la capa de dominio me he encotrado con un problema grave, es un problema de android pero quizas bastante general en el entorno "mobile".

En caso de usar Domain Model resulta preocupante el rendimiento del terminal y su uso de memoria, debido a la escasez de recursos y la poca potencia del micro, deberiamos liberar al terminal de toda la faena posible.

Un reproductor de música, pese a almacenar los titulos, autores, estadisticas... no llega a ser un verdadero sistema de información, por lo que la aplicación de patrones mas estandards de TI y los principios de diseño para esos casos debemos adaptarlos un poco. Además teniendo un sistema de base de datos relacional como SQLite se hace imperdonable no usarlo para realizar las consultas a las canciones para mostrar los datos y listas por pantalla.

Sunday, April 27, 2008

Bibliografia para Diseño

Para apoyo en los patrones de diseño y el mismo diseño he conseguido estos dos libros :

Applying UML Patterns - Introduction Object Oriented de Craig Larman

Patterns of Enterprise Application Architecture de Martin Fowler

También encotré una fuente de patrones de diseño para movil patterns.littlespringsdesign.com

Thursday, April 17, 2008

Diseño Capa de Presentación

Para la capa de presentación, se aplicará el patrón Abstract Factory para crear todos sus componentes, pues así podemos definir elementos visuales abstractos con los que trabajará nuestra capa de presentación, que se encargará de crear nuestras factorias abstractas podiendo extenderlas tanto como necesitemos por diferentes interficies fisicas posibles que vaya soportando como son ahora :

* HVGA (480x320) Landscape
* HVGA (320x480) Portrait
* QVGA (320x240) Landscape
* QVGA (240x320) Portrait

Esto sin contar que la pantalla puede ser táctil o no y necesitar una interficie con botones mas separados y accesibles o mas juntos.

El abstract factory en lo referente a la creación, en el propio diseño de la capa de presentación no entraré mucho ahora pero intentaré seguir los patrones que mejor se adapten a la solución deseada, no es algo que aporte nada nuevo o sirva para analizar las capacidades de la plataforma Android.

No obstante existe difrerentes webs de referencia y un libro bastante interesantes con este tema:

http://ui-patterns.com/
Designing Interfaces - Jenifer Tidwell
http://www.dofactory.com

Monday, April 14, 2008

Carga aplicaciones android

Una vez hemos compilado la aplicación de android y tenemos el ficher *.apk estamos en disposición de instalar dicha aplicacion en nuestro emulador.

Para ello necesitamos haber descargado e instalado de la web, en caso de no tener java instalado deberíamos bajar una de las últimas versiones.

Una vez descargado el fichero anterior, lo descomprimimos y dentro de la carpeta tools encontramos lo que nos interesa,

emulator - emulador de android propio.

adb - aplicacion para traspasar ficheros e instalar(desplegando) los ficheros .apk de nuestras aplicaciones(ejemplo).

Sobre estas tools y otras se pueden ver ejemplos en la web de referencia propia del emulador de Android

Sunday, April 13, 2008

Especificación y Diseño

Durante toda la semana he estado empezando a especificar y disseñar sobre papel las diferentes capas del proyecto.

Me ha llevado mucho más tiempo de lo esperado, pues por las diferentes posibilidades de los dispositivos que llevan android y algunas limitaciones de la plataforma no es del todo sencillo encontrar un punto de abstracción en el que el rendimiento no se vea demasiado afectado y sea abierto a la extensión pero cerrado a la modificación.

Dicho esto, lo primero que me dispuse esta semana es a encontrar un editor de UML con licencia libre (Las preferencias sobre software en este proyecto siempre que sea posible se usará software bajo licencia GPL, o lo más "libre" posible).

Buscando por comunidades y el gran google encontré la siguiente comparativa , y me acabé decidioendo por AgroUML.

Tuesday, April 8, 2008

Comunidad hispana Android

Hace tiempo que visito una comunidad de habla española sobre Android, con el tiempo han conseguido tener bastante actividad y un buen foro de dudas a parte de tutoriales / manuales.

Android-Spa

Sunday, April 6, 2008

User Interface Design

Aplicación para la ayuda en el diseño de la interfaz de usuario en android

http://www.droiddraw.org/

Wednesday, April 2, 2008

Android SDK M5 Release

La nueva versión de la SDK de android Android SDK M5 Release trae nuevas funcionalidades necesarias para le proyecto y otras reparadas.

El primero es la clase MediaPlayer que se le ha añadido ogg entre otros y supuesto streaming en mp4, a parte de alguna excepcion para algun invariante de sistema que antes no se tenía en cuenta.

MediaPlayer:

  • MediaPlayer:
    • Added support for OGG Vorbis (.ogg) and MIDI (.mid, .smf), XMF (.xmf, .mxmf), iMelody (.imy), RTTTL/RTX (.rtttl, .rtx) and OTA (.ota) audio file formats.
    • Added convenience methods for creating a android.media.MediaPlayer object from a Uri. See MediaPlayer.create(Context, Uri) and MediaPlayer.create(Context, Uri, Surface) for more details.
    • Added method for grabbing a frame from a video clip to use a thumbnail.
    • Added method to set power management behavior.
    • Added method to determine whether media is currently playing.
    • Added support for http streaming of MP4 media.
    • MediaPlayer.prepare() is now called from MediaPlayer.create() and you will get an exception if you call MediaPlayer.prepare() after using create().
  • MidiFile has been deleted in favor of android.media.MediaPlayer which offers improved functionality and a unified API for all multimedia files and streams.
  • There are numerous bugfixes in the media framework.
SQLite es el sistema de ficheros en el que se guardará toda la información que se necesite hacer persistente.

SQLite/Content Provider

  • The QueryBuilder class has been moved to the android.database.sqlite package and renamed SQLiteQueryBuilder as it now is responsible for building the SQL that is passed to android.database.sqlite.SQLiteDatabase.
  • The android.net.ContentURI class has be replaced with the new android.net.Uri class. This is not a 1:1 replacement and engenders a number of necessary changes in the way you use and manipulate URIs in Android applications. android.content.ContentUris provides some static helper methods for appending and parsing IDs. android.net.Uri.Builder is a builder class to help with creating new Uris (from existing ones if necessary). Take a look at the Notepad sample from the SDK to see how to use these classes to replace the ContentURI usage.

    Some suggested replacements:
    OldNew
    new ContentURI(String) Uri.parse(String)
    ContentURI.create(String) Uri.parse(String)
    ContentUri.countPathSegments() Uri.getPathSegments().size()
    ContentUri.getPathSegment() Uri.getPathSegments().get()
    or
    Uri.getLastPathSegment()
    ContentURI.addPath() Uri.Builder.appendPath()
    ContentURI.addId(id) uri = Uri.withAppendedPath(SOME_URI, id);
    or
    uri = ContentUris.appendId(uri.buildUpon(), id).build();
  • The previously unused groupBy and having parameters have been removed from ContentProvider.query().
  • ContentProvider has a new method, openFile() that takes a URI and returns a file descriptor to the opened file. The ContentProvider.openFileHelper() method covers the common case, override openFile and call it if you don't need anything fancy. It is now the responsibility of the ContentProvider to open the file, it no longer needs to have a special column with the file name, can open any file it wants, and also no longer needs to make the files world-readable. A file descriptor is returned to the client.
  • android.content.ContentURIParser has been removed, use android.content.UriMatcher instead.
  • ContentProvider.onSyncStart() and ContentProvider.onSyncStop() now each take an account parameter.
  • SQLiteCursor.supportsUpdates() could have returned true when updates were not supported, this is fixed.
  • SQLiteCursor.commitUpdates() now returns true when there are no updates to commit.
  • SQLiteCursor has a new method, hasUpdates() which returns true if any updates were made to the cursor.
  • The custom Android SQLite functions are now available in the sqlite3 shell tool.
  • SQLiteDatabase.query() may also take a SQLiteDatabase.CursorFactory now as well as the constructor.
  • android.database.Cursor has the new method getWantsAllOnMoveCalls() which tells the client side to send move notifications to the content provider for all moves, not just ones that cross window boundaries.
  • Cursor has the new method getExtras() which lets the cursor provide out of band data to the users.
  • Cursor has the new method respond() which lets the user send out of band data back to the Cursor implementation.
  • android.database.ArrayCursor has been replaced by android.database.ArrayListCursor.
  • Reading floating point and long values from android.database.sqlite.SQLiteCursor now works correctly.