lunes, 31 de marzo de 2014

Android y la clase Application

La clase Application es lo que une todas las actividades, servicios y recibidores en una entidad unificada. Es difícil entender que puede hacer la clase application por nosotros, sin tener en cuenta los siguientes puntos:
  • Las actividades son muy volátiles.
  • Las actividades no tienen acceso a la zona de memoria de otras actividades.
  • Las actividades se paran y arrancan todo el tiempo por muchas razones y no hay manera de saber si una actividad ya ha sido iniciada antes o es esta su primera vez, mientras que el onCreate de la clase Application solo se llama la primera vez que se inicia , por lo que puede ser un buen lugar para iniciar cosas que solo se necesiten poner al principio.
  • Todas los recibidores de broadcast, servicios y actividades tienen un método en su superclase getApplication(), que si se castea resulta en la clase del tipo que hayamos definido: SampleApplication myApplication = (SampleApplication) getApplication();
Si necesitamos un lugar donde guardar datos que vayan a usar muchas actividades la clase Application, puede ser un buen sitio. Debemos tener mucho cuidado al agregar datos a esta clase, ya que se iniciará antes que cualquier componente declarado en nuestro manifest, por lo que debemos hacer el método onCreate lo más liviano posible.
Entonces, si creamos una clase Application , luego es todo muy sencillo. Primero la definimos en el manifest, después de la Application que ya tenemos creada ...

  1. <application android:icon="@drawable/icon"  
  2.         android:label="@string/app_name"  
  3.         android:name".SampleApplication"/>  
... y luego creamos también la clase.
 
  1. package com.example.android;  
  2.   
  3. import android.app.Application;  
  4.   
  5. public class SampleApplication extends Application {  
  6.       
  7.     public String username;  
  8.   
  9.     public void onCreate(){  
  10.         super.onCreate();  
  11.     }  
  12. }  
Y de forma análoga a como se comentaba, para acceder a este atributos, primero hacemos el cast, desde donde queramos, y luego seteamos la información
 
  1. SampleApplication myApplication = (SampleApplication) getApplication();  
  2. myApplication.username = "Hello";   
Debemos estar seguros de que la información que guardemos en Application es relevante en la mayoría de ocasiones, ya que almacenar datos en esta clase puede penalizar el inicio de una aplicación de forma considerable.

martes, 18 de marzo de 2014

Android Wear: Reloj con Android

Ya por todas las ferias internacionales se muestran esos dispositivos wearables, desde artefactos de la casa, hasta relojes. 
Y Google no quiso quedarse atràs, empezò a formar parte. Y lo ha hecho en forma de plataforma, un mini sistema operativo basado en Android que recibe el nombre de Android Wear y que se estrena con el lanzamiento del LG G Watch. Todo indica que es una jugada inteligente con la que abrir paso a una nueva generación de dispositivos, como no, de la mano de Android, creando así una rama más dentro del sistema operativo .

Destaca la incorporación del asistente instantáneo, similar al del Moto X, que permitirá obtener resultados en el reloj con solo decir "Ok Google". Por ahora, a nivel prensa y development, no hay muchos más detalles, así que habrá que esperar a su lanzamiento en plena Feria Google I/O, y asì para conocer un poco más a fondo qué esconde esta nueva plataforma.
En la web, vimos un par de vídeos, en donde Google  muestra el dispositivo de la mano de sus ingenieros. Y también se ha activado la página para desarrolladores, , la pueden ver aquí.


Android Wear, tiene una interfaz muy cuidada, totalmente táctil y diseñada para wearables, al estilo Google Now, que nos deja acceder a información útil y notificaciones cuando más lo necesitamos, realizar preguntas por voz para obtener respuestas directas, controlar nuestra salud y estado físico, acceder y controlar otros dispositivos desde nuestro reloj, como responder a mensajes, reproducir música en el teléfono o mandar una película en el televisor.
Android Wear
Google todavía no ha anunciado ningún smartwatch basado en Android Wear, pero si que ha informado que ya están trabajando con varios fabricantes de electrónica de consumo, como Asus,HTC, LG, Motorola y Samsung, los fabricantes de chips Broadcom, Imaginación, Intel, Mediatek y Qualcomm, y marcas de moda como el Grupo Fossil, para lanzar durante este año los primeros smartwatches con Android Wear.
Y si alguno quiere comenzar a meterse en el tema del desarrollo de Aplicacion para Android Wear, acà les dejo el link con los principio de diseño:   http://developer.android.com/wear/design/index.html 

saludos!



Fuentes para Texto en Android

Por omision, en todos los dispositivos Android vienen cargadas tres fuentes que podemos utilizar libremente en nuestras aplicaciones:
  • Sans
  • Serif
  • Monospace
Para cambiar la fuente utilizada en un texto podemos indicarlo directamente en el archivo xml que lo define. Por ejemplo, en nuestra aplicación, abrimos el fichero \res\layout\main.xml y en la definición del TextView incluimos la linea :
android:typeface=”sans” de forma que quede como sigue:

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:typeface="sans"
    />


Para probar con las diferentes fuentes definimos  varias entradas en nuestro archivo strings.xml (por ejemplo ‘helloSans’, ‘helloSerif’ y ‘helloMonospace’) y a cada uno le pongo un contenido distinto. Después en el fichero main.xml defino un TextView por cada uno de ellos con una fuente distinta:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloSans"
    android:typeface="sans"
    />
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloSerif"
    android:typeface="serif"
    />
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloMonospace"
    android:typeface="monospace"
    />   
</LinearLayout>

Al ejecutar la aplicación veremos los diferentes tipos de letra aplicados a cada uno de los campos:
 
Si queremos aplicar una fuente diferente a las que vienen por defecto en Android tendremos que conseguir el fichero .ttf (true type font) correspondiente (en la red existen multiples páginas desde la que podes descargar archivos de este tipo).
Una vez conseguido debemos crear la carpeta ‘fonts’ dentro de ‘assets’ en nuestro proyecto y, dentro de ella copiaremos nuestro fichero .ttf. Yo haré la prueba con la fuente jokerman.ttf.
Defino una nueva entrada en strings.xml llamada ‘helloPoker’ y un nuevo campo TextView en main.xml, sin ponerle el atributo typeface, pero añadiendo un identificador para poder manejarlo desde nuestro programa. Debe quedar así:

<TextView 
    android:id="@+id/poker"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloPoker"
    /> 
Para asignar la nueva fuente al campo de texto deberemos empezar a tocar código fuente del fichero ‘AndroideNovatoActivity.java’ de la carpeta ‘src’ de forma que quede como sigue:

 
01public class AndroideNovatoActivity extends Activity {
02    /** Called when the activity is first created. */
03    @Override
04    public void onCreate(Bundle savedInstanceState) {
05        super.onCreate(savedInstanceState);
06        setContentView(R.layout.main);
07         
08        // Defino la nueva fuente cargandola desde el fichero .ttf        
09        Typeface miPropiaTypeFace = Typeface.createFromAsset(getAssets(),"fonts/jokerman.ttf");
10         
11        // Cargo en una variable tipo TextView el campo de la pantalla
12        // identificado con el id poker.
13         
14        TextView helloPoker = (TextView)findViewById(R.id.poker);
15         
16        // Le aplico el nuevo tipo de letra
17        helloPoker.setTypeface(miPropiaTypeFace);
18 
19    }
20}
Si os aparecen algunas líneas subrayadas en rojo significa que debemos importar las clases corresondientes para manejar ese tipo de datos. Para solucionar este problema pulsamos a la vez las teclas Ctrl-Shift y la letra ‘O’ y Eclipse incluirá las líneas que hacen falta automáticamente al principio del programa.
Al ejecutar la aplicación veremos el nuevo campo con la nueva fuente cargada:

 
El uso de fuentes personalizadas tiene sus problemas como el tamaño que ocupan o posibles desajustes según la resolución del dispositivo en el que se utilice. Asimismo debemos tener en cuenta si la fuente utilizada permite su libre utilización o está sujeta a algún tipo de restricción legal.