Nuevo curso de Iniciación a la Programación Android

Objetivo: aprender a programar aplicaciones Android sin conocimientos previos de Eclipse, ni Java ni XML

En el Campus Tecnologico Virtual se inicia el nuevo curso para aprender a programar aplicaciones Android desde cero, sin conocimientos previos. ¡ Anímate en http://www.cursoandroid.es !

Adelantamos el temario que se ofrecerá en dicho curso:

  • Tema 1.- Introducción a Android y Eclipse
    Introduccion a Android
    Instalación de Eclipse + SDK
    Interfaz (perpectivas) y uso de Eclipse
    Gestión de errores de código
  • Tema 2.- Crear nuestra primera aplicación
    Aplicación Hola Mundo
    Configuración Emulador
  • Tema 3.- Tour por el entorno de desarrollo
  • Tema 4.- Introducción a programación Android
    Logica
    Bucles
    Ciclo vida
    Componentes
    Intent
  • Tema 5.- Interface Usuario
    Los Layouts
    Los Botones
    TextView y EditText
    Listas ListView
  • Tema 6.- Mapas y GPS
    Geolocalizacion con GPS
    Obtener Clave APIv2 Maps
    Insertando APIv2 Key
    Ejemplo Mapa APIv2
  • Tema 7.- Almacenamiento
    Almacenamiento externo
    Almacenamiento interno
    Guardar Preferencias de APP sin base de datos
  • Tema 8.- Widgets
    Introducción básica
    Ejemplo de widget
  • Tema 9.- Sensores.
    Introducción básica
    Ejemplo de sensores
  • Tema 10.- Desarrollador
    Registrar un desarrollador
    Publicar aplicaciones en Google Play
    * Ejercicio: crear APP final de curso

Además del ejercicio final de curso, el alumno tendrá que realizar ejercicios (test y aplicaciones) en cada tema, además de tener material adicional con ejemplos completos de código.

¡Entra en http://www.cursoandroid.es e infórmate sin compromiso!

Como guardar preferencias en mi aplicación con SharedPreferences sin usar base de datos

Objetivo:

Guardar preferencias en mi aplicación sin usar base de datos, de forma que podremos consultar los datos guardados en la misma aplicación, o incluso desde otras, ajustando parámetros.

Para esto, Android dispone de una clase SharedPreferences. Instanciando objetos de la misma, podremos guardar datos en nuestra aplicación para poder consultarlos más tarde.

Esta solución y rápida y muy simple, con lo que ahorraemos muchísimo tiempo. Los datos se guardarán automáticamente en un fichero XML en la ruta de nuestra aplicación con las preferencias en su interior, pero no tenemos que preocuparnos porque lectura y escritura son manejados por la clase SharedPreferences.

Dichas preferencias podrían compartirse con otras aplicaciones si lo deseamos, pasando un parametro a la hora de instanciar el objeto:

  • MODE_PRIVATE: sólo nuestra aplicación podrá leer y escribir datos de configuración en el fichero XML.
  • MODE_WORLD_READABLE: sólo nuestra aplicación podrá escribir datos de configuración, el resto de aplicaciones del dispositivo Android podrá leer los datos de configuración pero no modificarlos.
  • MODE_WORLD_WRITEABLE: todas las aplicaciones del dispositivo Android podrán leer y escribir datos de configuración en el fichero XML.
  • MODE_MULTI_PROCESS: no suele usarse, puede servir cuando la aplicación tiene múltiples procesos (para la comunicación entre ellos).

Antes de poner un ejemplo, es importante saber que la forma adecuada para las llamadas es en los métodos onStart y onDestroy de la aplicación Android, para leer y guardar respectivamente las preferencias.

Para obtener, insertar o modificar preferencias: get o put correspondientes al tipo de dato de cada preferencia.
Por ejemplo getString(“usuario”, “pepito_por_defecto”) accederia al elemento con indice/clave “usuario”. Si no se devuelve valor, pondria por defecto “pepito_por_defecto”.

Creamos un ejemplo completo donde guardamos una cadena en las preferencias al salir de la aplicación, y la leemos al arrancar ésta. Observaremos cómo la primera vez que la arrancamos no está guardada, y las siguientes ya sí. Creamos varias funciones (cargarPreferencias y guardarPreferencias) para hacerlo más entendible.

Código fuente Java:

[sourcecode language=”java”]
package sharedpreferences.tutorialandroid.com;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Toast;

public class TutorialAndroid_SharedPreferencesActivity extends Activity {
String preferencias1;
String preferencias2;
boolean preferenciasGuardadas;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

// al abrir la aplicación, guardamos preferencias
@Override
public void onDestroy(){
super.onDestroy();
guardarPreferencias();
}

// al abrir la aplicación, cargamos preferencias
@Override
protected void onStart() {
super.onStart();
cargarPreferencias();
// para ver el funcionamiento, imprimimos preferencias si existen
String mensaje = "";
if (this.preferenciasGuardadas) {
mensaje = "Las preferencias fueron guardadas ya";
} else {
mensaje = "Las preferencias todavia no se guardaron";
}
Toast.makeText(this, mensaje, Toast.LENGTH_SHORT).show();
}

//guardar configuración aplicación Android usando SharedPreferences
public void guardarPreferencias(){
SharedPreferences prefs = getSharedPreferences("preferenciasMiApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("preferenciasGuardadas", true);
editor.putString("preferencia1", "Hola estoy guardando esto");
editor.putString("preferencia2", "y tambien esto");
editor.commit();
Toast.makeText(this, "guardando preferencias", Toast.LENGTH_SHORT).show();
}

//cargar configuración aplicación Android usando SharedPreferences
public void cargarPreferencias(){
SharedPreferences prefs = getSharedPreferences("preferenciasMiApp", Context.MODE_PRIVATE);
this.preferencias1 = prefs.getString("preferencia1", "valor por defecto");
this.preferencias2 = prefs.getString("preferencia1", "valor por defecto");
preferenciasGuardadas = prefs.getBoolean("preferenciasGuardadas", false);

}
[/sourcecode]

Descárgate el código aquí

En el código descargable se encuentra el proyecto completo.

¡Espero que os sirva de ayuda, saludos!

Como mostrar imagen img scr en formato HTML con fromHTML

Objetivo:

Mostrar una imagen usando fromHTML, de forma que podremos cogerla de una internet con la etiqueta img de HTML.

Antes de este tutorial, aunque muy básico, puede que desees familiarizarte con fromHTML. Para ello puedes pasarte por un ejemplo en el que sólo se utiliza texto en HTML en este tutorial. En él se muestra el hipertexto en un AlertDialog, pero es igualmente sencillo asignarlo a un TextView.

Cuando deseamos utilizar HTML en un TextView, por ejemplo, podemos llamar al paquete android.text.html, dejando que él actúe sobre nuestro texto, aplicando la vista indicadas en las etiquetas que le dan formato. En este HTML podemos incluso utilizar llamadas a imágenes con la tag img src.

Creamos  mini-aplicación para coger el HTML y lo aplicamos a un TextView para mostrarlo. Para ello, debemos crear una aplicación desde el principio,  crear un TextView para insertar el hipertexto en HTML (con imagen incluida en este caso), y finalmente llamar a la clase android.text.html. Para que las imágenes en el HTML aparezcan debemos implementar la función getImageHTML, que devolverá una instancia de la clase ImageGetter, necesaria para ello.

Vemos una captura de la mini-aplicación:

Imagen en fromHTML by TutorialAndroidcom

Y a continuación mostramos el texto comentado:

Código fuente Java:

[sourcecode language=”java”]
package fromHtml.image.tutorialandroid.com;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.text.Html.ImageGetter;
import android.util.Log;
import android.widget.TextView;

public class HtmlFromHtmlImageActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

String html = "Tus ejemplos en<br/>TutorialAndroid.com<br/><br/><img src=’http://www.tutorialandroid.com/tutorialandroidcom.jpg’ />";

Spanned s = Html.fromHtml(html,getImageHTML(),null);
TextView txt = (TextView)findViewById(R.id.main_menu_textview);
txt.setText(s);
}

public ImageGetter getImageHTML(){
ImageGetter ig = new ImageGetter(){
public Drawable getDrawable(String source) {
try{
Drawable d = Drawable.createFromStream(new URL(source).openStream(), "src name");
d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}catch(IOException e){
Log.v("IOException",e.getMessage());
return null;
}
}
};
return ig;
}

}
[/sourcecode]

Descárgate el código aquí

En el código descargable se encuentra el proyecto completo.

¡Espero que os sirva de ayuda, sobre todo a ti Ricardo Klein!

¡Saludos!

Como pasar de Drawable a Bitmap y descargar imagen de internet a Bitmap

Objetivo:

Pasar de Drawable a Bitmap, o descargar como Bitmap una imagen de internet a través de su url.

Para ello podemos usar las funciones que hay más abajo, llamadas drawableToBitmap(Drawable mDrawable) y urlImageToBitmap(String urlImage), donde el valor devuelto de cada una de las funciones será de la clase Bitmap.

A continuación mostramos la primera función, a la cual le pasamos la instancia del objeto Drawable para que nos devuelva el Bitmap:

Código fuente función (Java):

[sourcecode language=”java”]
/**
* Pasar de Drawable a Bitmap. By TutorialAndroid.com
* @param Drawable mDrawable
* @return Bitmap
*/
public Bitmap drawableToBitmap(Drawable mDrawable){
// Usamos el método decode Resource de BitmapFactory para la conversión
return BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_resource);
}
[/sourcecode]

A continuación mostramos la primera función, a la cual le pasamos la instancia del objeto Drawable para que nos devuelva el Bitmap:

Código fuente función (Java):

[sourcecode language=”java”]
/**
* Descarga una imagen de internet a Bitmap. By TutorialAndroid.com
* @param String urlImage
* @return Bitmap (null en caso de no poder)
*/
public Bitmap urlImageToBitmap(String urlImage){
Bitmap mIcon1 = null;
URL url_value = new URL(urlImage);
if (url_value != null) {
mIcon1 = BitmapFactory.decodeStream(url_value.openConnection().getInputStream());
}
return mIcon1;
}
[/sourcecode]

Una vez hemos obtenido el Bitmap, podemos realizar tareas con él, tal y como cambiar el tamaño (ver aqui).

Espero que os haya servido de ayuda.

¡Un saludo!

Como cambiar de tamaño una imagen (bitmap)

Objetivo:

Cambiar de tamaño una imagen (objeto de la clase Bitmap), para reducirlo o ampliarlo hasta un nuevo tamaño deseado.

Para ello podemos usar la función que hay más abajo, llamada redimensionarImagenMaximo(Bitmap mBitmap, float newWidth, float newHeigth), donde los parámetros serán el Bitmap que deseamos redimensionar, la nueva anchura y la nueva altura.

La función calcula una nueva escala, aplicandolas a una instancia de la clase Matrix, y posteriormente creando de un nuevo Bitmap, que vendrá ya con las nuevas dimensiones.

A continuación mostramos la función, la cual devolverá una nueva instancia de la clase Bitmap, que contendrá nuestra imagen ya redimensionada.

Código fuente función (Java):

[sourcecode language=”java”]
/**
* Redimensionar un Bitmap. By TutorialAndroid.com
* @param Bitmap mBitmap
* @param float newHeight
* @param float newHeight
* @param float newHeight
* @return Bitmap
*/
public Bitmap redimensionarImagenMaximo(Bitmap mBitmap, float newWidth, float newHeigth){
//Redimensionamos
int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeigth) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
return Bitmap.createBitmap(mBitmap, 0, 0, width, height, matrix, false);
}
[/sourcecode]