Programación Android, BroadcastReceiver

Después de explicar la pasada semana cómo utilizar un Service en android, el siguiente paso lógico es explicar el uso del BroadcastReceiver. Un BroadcastReceiver es un componente android que permite el registro de eventos del sistema.
Todos los Receivers registrados para un evento serán notificados por android una vez que éstos ocurran.

BroadcastReceiver
BroadcastReceiver

Leer más…

Programación Android, Service

Un Service, o servicio, es un componente que realiza una tarea en background, sin que exista interfaz gráfica que interactúe con el usuario, y por lo tanto no tiene que cumplir con el ciclo de vida de las aplicaciones.

Generalmente un servicio se va a crear para realizar una actividad repetitiva, o que necesita realizar operaciones que necesitan bastante tiempo, como podría ser una descarga de un archivo, sincronizar datos de la apliación, etc.

Android ya nos ofrece el uso de diferentes servicios del sistema, a través de clases Manager específicas, a las que se accede a través del método getSystemService(String name), por ejemplo:

AlarmManager manager = (AlarmManager) getSystemService(String name);

Hay que tener en cuenta que los servicios, como cualquier otro objeto de la aplicación, corren sobre el proceso que lo ha creado (a menos que se indique lo contrario), y que no es un nuevo hilo. Esto quiere decir que si necesitamos que el servicio realice una acción con mucha carga de trabajo o que pueda bloquear el sistema, tendremos que crear un nuevo hilo dentro de nuestro servicio para realizar la tarea y evitar así los ANRs (Application Not Responding errors). Para más información consultar Processes and Threads.

Un servicio realiza dos tareas muy sencillas:
Leer más…

Programación android, Cómo usar un Menú

Menú en Android
En esta ocasión vamos a explicar cómo usar el menú en las aplicaciones Android. En algún ejemplo que hemos hecho en Proyecto Simio, la lógica de la interfaz era “poco útil”, por ejemplo en el último que hicimos sobre Preferencias de Usuario, para llamar a las preferencias lo hacíamos a través de un botón, sin embargo, si pensamos en la optimización de la experiencia del usuario que vaya a utilizar nuestra aplicación, éste esperará encontrar las preferencias a partir de un menú.
Como siempre, vamos a utilizar un pequeño ejemplo para configurar y utilizar nuestro menú, esta vez utilizaremos un Layout con un simple TextView que va a mostrar la opción del menú que se ha seleccionado.
Leer más…

Programación Android, Preferencias de usuario (SharedPreferences, PreferencesActivity y PreferenceFragment)

SharedPreferences

Después de unas semanas de vacaciones volvemos a la carga con una nueva publicación sobre programación Android. En esta ocasión vamos a hablar de la posibilidad de almacenar preferencias de usuario (SharedPreferences) en nuestra aplicación, utilizando la herramienta que nos facilita Android para ello.

Para explicar el uso de esta herramienta vamos a crear una aplicación con una pantalla que contenga un TextView. El texto a mostrar, el tamaño de la fuente y el fondo del TextView los podremos configurar a partir de las preferencias del usuario, o dejar unos valores por defecto.

En primer lugar vamos a crear una Activity en nuestro proyecto que contenga un TextView, que será el que muestre los valores de las preferencias, y un Button que lanzará la pantalla de preferencias:

Main Activity
Main Activity

Leer más…

Programación Android, Restringir aplicación para dispositivos smartphone o tablet

smpartphone_tablet

Aunque es una práctica no recomendada por Google, en ciertas ocasiones podemos necesitar que una aplicación esté destinada al uso exclusivo en determinados tipos de dispositivos, ya sea para un Smartphone o una Tablet. Para estos casos tenemos  la opción de restringir para qué dispositivos está destinada la aplicación a través del manifiest.xml de nuestro proyecto, utilizando la etiqueta <compatible-screens> y en su interior definir tantas pantallas como necesitemos, teniendo en cuenta que para cada tamaño de pantalla también tenemos que indicar a qué densidades queremos dar soporte.

Esto quiere decir que, si por ejemplo queremos dar soporte a pantallas de tamaño large (que hacen referencia a las tablets de 7′) en realidad deberemos indicar 4 pantallas distintas en el manifiest.xml, una por cada densidad: ldpi, mdpi, hdpi y xhdpi. Si quisieramos además dar soporte a pantallas de 10′ haríamos lo mismo con las de tamaño xlarge, con lo que el manifiest.xml contendría las siguientes etiquetas:
Leer más…

Programación Android, AsyncTask – Conectar a Internet y leer documentos JSON

json

Esta semana vamos a escribir un ejemplo parecido al de la semana pasada, en el que conectábamos a una URL para recoger un documento XML y analizarlo, utilizando para eso un AsyncTask. En esta ocasión vamos a hacer lo mismo, pero con un documento JSON.
En primer lugar debemos conocer la estructura del documento previamente, para poder analizarlo después desde el código. La URL que vamos a utilizar en esta ocasión es la api de flickr, que nos permite ver las fotos publicadas en un documento JSON: http://api.flickr.com/services/feeds/photos_public.gne?format=json.

Como se puede ver en el documento, hay una etiqueta “items”, que es un array que contiene una serie de documentos JSON a su vez. Cada uno de estos documentos del array son los que contienen los datos de las fotos publicadas.
Leer más…

Programación Android, Ejemplo de Bases de datos & ListView IV

Android SQLite

En la última entrada nos quedamos a falta de lanzar una segunda Activity con los datos del ítem seleccionado del ListView, para poder modificarlos posteriormente. Con esta entrada terminaremos este ejemplo de como usar bases de datos en Android, con POO y MVC.

Implementar OnItemClickListener

En primer lugar vamos a implementar el Listener OnItemClickListener en la primera Activity, para que cuando suceda este evento recojamos la información del ítem seleccionado y lo enviemos a la segunda Activity. Añadiremos el Listener a la firma de nuestra Activity, y posteriormente escribiremos el método que nos pide:

public class MainActivity extends Activity implements OnClickListener, OnItemClickListener {
/* ... */

	@Override
	public void onItemClick(AdapterView<?> adapter, View view, int position,
			long id) {
		// TODO Añadir el código para recuperar la información y mandarla a la
		// segunda Activity.

	}
}

Leer más…

Programación Android, Ejemplo de Bases de datos & ListView II

Android SQLite

En la anterior publicación sobre el manejo de bases de datos nos quedamos en el punto en el que teníamos que recoger los datos de la BD para mostrarlos en el primer ListView.

Creando la clase Modelo

Para hacer esto en primer lugar vamos a crear una nueva clase, que actuará de Modelo de datos, es decir, será una clase que va a representar la estructura de la tabla a la que queremos acceder, de manera que los datos de cada tupla de la tabla se almacenarán en un objeto de la clase Modelo creada:

/**
 * Clase Modelo de las tablas de la BD.
 *
 * @author ProyectoSimio
 *
 */
public class DatosTabla {
	private int _id;
	private String nombre, apellido, telefono;

	/**
	 * Constructor de la clase Modelo para las tablas de la BD
	 *
	 * @param _id
	 * @param nombre
	 * @param apellido
	 * @param telefono
	 */
	public DatosTabla(int _id, String nombre, String apellido, String telefono) {
		this._id = _id;
		this.nombre = nombre;
		this.apellido = apellido;
		this.telefono = telefono;
	}

	// Getters & setters:
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	// El campo _id es la clave primaria que no tiene sentido modificar, por lo
	// tanto no le creamos un set a este campo.
	public int get_id() {
		return _id;
	}

}

Leer más…

Programación Android, Ejemplo de Bases de datos & ListView I

Android SQLite

Después de explicar cómo gestionar bases de datos en las entradas Bases de Datos I (Modelo-Vista-Controlador), Base de datos II y Bases de Datos III, vamos a mostrar un ejemplo práctico en el que utilizaremos también un ListView para mostrar los datos que recojamos de la Base de Datos, y además incorporaremos la orientación a objetos en nuestro código, para que quede más ordenado el código de nuestra aplicación y posteriormente sea más fácil de mantener.

En primer lugar vamos a explicar un poco en qué consistirá el proyecto: Vamos a crear dos tablas distintas. En la primera, en caso de que no contenga datos, insertaremos una colección de datos al ejecutar la aplicación. Una vez que tengamos datos en la primera de las tablas, pulsando un botón en la interfaz gráfica copiaremos el contenido de la primera tabla a una segunda tabla. También habilitaremos un botón que borrará todo el contenido de la segunda tabla. Por último, pulsando uno de los registros del ListView en que se muestran los datos de la segunda tabla se abrirá una nueva Activity en la que mostraremos en detalle los datos que corresponden a ese registro, y además podremos modificarlos.

Creando el interfaz principal

Para la interfaz hemos optado por un LinearLayout que contiene 2 botones y 2 ListViews, además de 2 TextViews para ayudar a diferenciar entre los ListViews:

Main Layout
Main Layout

Leer más…

Programación Android, Base de Datos III

Android SQLite
En la última entrada mostramos cómo crear la base de datos para nuestra aplicación, así como las tablas, y qué métodos eran necesarios para ello. Lo último que nos falta por hacer es poder gestionarla. Es decir, añadir, borrar, actualizar y recuperar datos de la BD. Esto es lo que vamos a tratar de explicar en esta ocasión.

En la creación de la BD ya mostramos el método que nos permite pasar una sentencia SQLite completa, cuando creamos la tabla. En esta ocasión vamos a explicar una serie de métodos que nos facilitarán la tarea y, en la mayoría de los casos, evitarán que tengamos que escribir sentencias SQLite completas, aunque también explicaremos un nuevo método con el que recuperar la información de la BD a partir de una sentencia, para aquellos casos en que se haga necesario.

En Android, como hemos dicho, disponemos de métodos que nos van a facilitar las acciones más comunes en nuestra BD, de manera que gran parte de nuestras necesidades quedarán cubiertas sin necesidad de escribir largas sentencias SQLite, que en su lugar cambiaremos por algunos parámetros que pasamos a una determinada función. Empezaremos por explicar cómo insertar datos en nuestra tabla.

Insertar registros en la Base de Datos

En el objeto que creamos de la clase SQLiteDatabase, que en nuestro caso nombramos sqlDB, disponemos de un método que nos permite insertar datos en nuestras tablas de forma sencilla:

public long insertOrThrow (String table, String nullColumnHack,
                             ContentValues values)

Leer más…