jueves, 29 de septiembre de 2011
Prácticas Android: arrastrar para desplazarse entre distintas pantallas
Prácticas Android: integrando un explorador de archivos en nuestras aplicaciones
adb install
miércoles, 28 de septiembre de 2011
Java. Splash-Screen de arranque de programa con transparencias.
martes, 27 de septiembre de 2011
Prácticas Android: enviando y recibiendo mensajes SMS
- Descarga el proyecto NetBeans de ejemplo aquí
- Para poder probar la aplicación deberás instalarla en dos terminales distintos, uno para enviar y otro para recibir. Como número de teléfono de cada terminal podrás usar el número de puerto en el que corre el emulador. Podrás verlo en la barra de título de la ventana del emulador.
Prácticas Android: enviando un email a una lista de destinatarios
Se nos pedirá que introduzcamos el identificador de la cuenta y nuestra contraseña:
Pulsamos el botón Next para avanzar. El proceso de verificación de la cuenta puede tardar algún tiempo:
A continuación podemos darle opcionalmente un nombre a nuestra configuración de cuenta y proporcionar un nombre de usuario que aparecerá en los mensajes salientes:
Después de pulsar el botón Done y si todo ha ido bien, el proceso termina mostrándonos una lista con los correos de nuestra bandeja de entrada:
Una vez configurado el correo, crea una app Android en NetBeans añadiendo el siguiente código al método onCreate().
String listaDestinatarios[] = {"correo1@hotmail.es", "correo2@gmail.com"};
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, listaDestinatarios);
intent.putExtra(Intent.EXTRA_SUBJECT, "Asunto");
intent.putExtra(Intent.EXTRA_TEXT, "Contenido");
startActivity(Intent.createChooser(intent, "Email"));
Al arrancar la aplicación ésta invocará a "Email" pasándole la lista de correos a los que va destinado el correo, con el asunto del mismo y el contenido. Después el usuario tendrá que pulsar el botón "Send" para confirmar el envío. Antes podrá llevar a cabo las ediciones que considere oportunas.jueves, 22 de septiembre de 2011
Prácticas Android: trabajando con bases de datos SQLite
Intenta subsanar los siguientes errores:
- La aplicación permite agregar un empleado sin nombre, especificando sólo la edad.
- El programa lanza un críptico mensaje de error cuando se introduce texto en el cuadro de la edad y se intenta insertar el empleado.
- Cuando eliminamos un empleado y volvemos a la pestaña para añadir nuevos empleados, no se actualiza el contador de empleados totales registrados en la base de datos.
- Tras ingresar un nuevo empleado, los cuadros de texto con la información del mismo no se limpian.
- No se impide la introducción de registros duplicados.
Otras tareas propuestas:
- Ya que los departamentos a los que pueden pertenecer los empleados se introducen desde el código, estos son fijos, no hay posibilidad de cambio. Habilita un cuadro de texto para poder añadir nuevos departamentos.
- Crea una nueva tabla donde vayan a parar los empleados que se hayan eliminado, a manera de archivo histórico y habilita algún componente que permita ver el contenido de dicho histórico.
miércoles, 21 de septiembre de 2011
Prácticas Android: servicios y reproducción de sonido
Un servicio es una aplicación que corre de forma automática, sin interacción directa con el usuario (aunque pueden ser interactuados por mediación de una actividad, como en este ejemplo). Desarrollan tareas importantes, para el resto de las aplicaciones o para el sistema, ejecutándose en segundo plano. Tienen un ciclo de vida diferente a las actividades, por lo que los métodos que hay que sobrecargar también son diferentes. En este proyecto NetBeans de ejemplo dispones de una interfaz gráfica con dos botones para iniciar y detener un servicio que permite reproducir música de fondo. Además, aparecerán advertencias indicándote por qué fase del ciclo de vida del servicio se está pasando en cada momento. Trata de contestar a los siguientes puntos:
- ¿Cuál es la clase base de la que han de derivar todos los servicios?
- ¿Cuál es la clase que permite la reproducción de sonidos?
- ¿Para qué sirve el método onBind() del servicio? ¿Por qué aquí devuelve null en todo caso?
- ¿Se ha de especificar el servicio de alguna manera en el AndroidManifest.xml?
- ¿Qué se invoca antes, a onCreate() o a onStart()?
- ¿Qué clase de objetos permiten comunicar la actividad con el servicio para controlarlo a través de los botones?
martes, 20 de septiembre de 2011
Prácticas Android: cambiando la altura de los tabs
- En main.xml localiza la etiqueta
y cambia android:layout_height="65px" por android:layout_height="40px" - En MainActivity.java localiza las instrucciones tipo
tabs.getTabWidget().getChildAt(<índice>).getLayoutParams().height = 65;
y sustitúyelas por
tabs.getTabWidget().getChildAt(<índice>).getLayoutParams().height = 40;
Prácticas Android: experimentando con secuencias animadas de imágenes
- ¿Qué clase es imprescindible para poder animar una sequencia de imágenes? ¿En qué paquete se encuentra?
- ¿Cómo podrías variar la velocidad de la animación?
- ¿Qué habría que hacer para incluir algún fotograma más?
lunes, 19 de septiembre de 2011
Java 2D
A medida que se van introduciendo nuevas clases de la API, éstas se van hilvanando entre sí para proporcionar al programador un mayor control sobre el aspecto de los lienzos que quiera dibujar. De esta forma se estudia, entre otras muchas cosas, el dibujo de figuras sobre fotografías digitales, la sobreimpresión de texto sobre imágenes e incluso la utilización del contorno de un texto en negrita como elemento a través del que ver una imagen de fondo.
Cada uno de los conceptos necesarios se introduce desde cero, aunque se suponen conocimientos del lenguaje Java, y se proporcionan numerosos ejemplos completos que pueden ser puestos en práctica sin más modificación que la de elegir la foto preferida que se desea transformar, o modificar la cadena de texto a visualizar. Cada ejemplo se acompaña de una adecuada explicación sobre las líneas de código vitales que producen el efecto que se desea conseguir en cada caso, por lo que al lector le resultará muy cómodo realizar modificaciones personalizadas y obtener sus propios resultados. La inclusión de las imágenes que resultan de cada uno de los ejemplos comentados también ayuda enormemente a la comprensión del código y facilita la asimilación de conceptos.
jueves, 15 de septiembre de 2011
Prácticas Android: Cambiar/Restaurar el fondo de pantalla.
- Cambiar el fondo de pantalla supone disponer de algún permiso especial. ¿Cómo se llama dicho permiso? ¿En qué archivo ha de ser especificado?
- Intenta sustituir la imagen del tigre por otra imagen personalizada.
- ¿Serías capaz de crear una lista de imágenes para poder elegir entre varias?
martes, 13 de septiembre de 2011
Android: ejemplo de Cajón Deslizante (SlidingDrawer)
- Archivo /res/layout/main.xml:
<?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/hello"
/>
<SlidingDrawer
android:id="@+id/drawer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:handle="@+id/handle"
android:content="@+id/content">
<ImageView
android:id="@id/handle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/icon"/>
<LinearLayout
android:id="@id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Ejemplo de Sliding Drawer"/>
</LinearLayout>
</SlidingDrawer>
</LinearLayout>
- Archivo /res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Demo Cajón Deslizante</string>
<string name="hello">Hola a todos</string>
</resources>
Prácticas Android: Campos de texto con función de autocompletado dinámica
Descarga el siguiente proyecto de NetBeans e indaga sobre la implementación de este campo de texto dinámico para introducir nombres de países. A medida que se escribe irán apareciendo nombres cuya parte inicial coincida con los caracteres introducidos. Si no se selecciona ningún país de la lista desplegable y se introduce uno nuevo, al hacer clic en el botón "Agregar País", dicho país se añadirá a la lista ya existente de manera que también podrá formar parte de despliegues posteriores. Esto es, el programa tiene una lista estática inicial formada por los países "Argentina", "Albania", "Alemania", "Argelia", "Israel", "Bolivia", "México", "Brasil", "Holanda", "Italia", "España", "Etiopía" pero podrás aumentarla con los países que vayas introduciendo en tiempo de ejecución.
Trata de hallar respuesta a las siguientes cuestiones:
- El TextView auxiliar con id "txt_texto" está declarado convenientemente pero su atributo de visibilidad ha sido marcado como "gone" y no se despliega en pantalla. ¿Qué diferencia aprecias al cambiar "gone" por "invisible"? ¿Son lo mismo? Estudia el comportamiento de la aplicación también cuando se marca como "visible"
- ¿Cómo se consigue que no se almacene el mismo país más de una vez? Si los textos introducidos son exactamente iguales no aparecerán repetidos en la lista desplegable; pero si hay diferencias entre mayúsculas y minúsculas sí se repiten... ¿Se te ocurre alguna manera de evitar esta situación?
- Cambia el valor de la propiedad android:completionThreshold para descubrir cuál es su cometido.
Prácticas Android: explorando los ficheros de texto
Ejemplo de lectura de fichero de texto:
Prácticas Android: crear aplicaciones con más de una pantalla
- La creación de una clase por cada pantalla extendiendo siempre la clase Activity
- Los archivos descriptivos de las distintas interfaces en la subcarpeta /res/layout. ¿Cómo asocia el compilador cada archivo XML con la subclase de Activity (pantalla) que le corresponde?
- La inclusión de las actividades en el descriptor AndroidManifest.xml
- La comunicación entre pantallas mediante objetos Intent y el paso de pares (clave, valor) mediante Bundle.
jueves, 8 de septiembre de 2011
miércoles, 7 de septiembre de 2011
Prácticas Android: experimentando con Google Maps
Descarga este proyecto de NetBeans 7.0.1 en el que encontrarás una aplicación básica para el uso de Google Maps sobre Android. Para que funcione deberás contar con un terminal virtual con la siguiente configuración:
Una vez cubiertos estos pormenores podrás ejecutar la aplicación desde el IDE de NetBeans. Simplemente, carga a pantalla completa un mapa donde se marca la ubicación del centro donde estamos impartiendo el curso, tal y como se muestra en la primera viñeta.
No obstante, hay comentadas algunas líneas de código que ilustran otras características adicionales de los mapas. Por ejemplo, en el método sobrecargado onCreate() de la clase AndroidMapas hay una línea comentada para activar la vista de satélite. Quita el comentario y vuelve a ejecutar el proyecto para comprobar que efectivamente funciona. En ese mismo método, al final, hay una llamada comentada al método privado buscarUbicacion() que es capaz de mostrarnos el mapa de alguna ubicación dando una descripción textual de la misma. Esto es, la función contraria a la primera: en vez de buscar un punto a partir de sus coordenadas, buscamos una coordenada a partir de la descripción del punto.
Si quieres una explicación más detallada de la funcionalidad de las distintas líneas de código lee atentamente estos tres artículos relacionados:
javascript:void(prompt('',gApplication.getMap().getCenter()));
Una vez que dispongas de las coordenadas localiza el lugar del código donde se emplean así como dónde se le da nombre al punto referenciado para cambiar el texto de la etiqueta.
Prueba, también a hacer búsquedas descriptivas con distintas cadenas de texto. Lo ideal sería que ampliaras la interfaz mediante un cuadro de texto que me permitiese introducir la cadena de búsqueda y un botón para activarla.
¿Sabrías decir en qué parte del código se elimina la barra de título y los iconos de batería y cobertura para aprovechar todo el espacio de la pantalla para el mapa?
¿Serías capaz de cambiar el marcador típico de Google Maps por el icono de una chincheta o el logotipo de Android?
Averigua cómo cambiar el círculo azul del marcador por un cuadrado rojo.
martes, 6 de septiembre de 2011
Ejercicio. Desarrollar una aplicación Android básica.
- La edad debe ser superior o igual a 18 años, pues se considera que el cálculo no es suficientemente preciso aplicado a menores de edad.
- La altura debe ser superior o igual a 150 cms, pues el cálculo se desvirtúa para personas que padezcan algún tipo de problema de crecimiento.
- El peso no puede ser negativo o cero.
- Todos los campos son obligatorios.
El resultado que debe mostrarse en la salida, en función del índice calculado, será:
- Por debajo de los 20 Kg/m2: "Anorexia nerviosa"
- Entre 20 y 25: "Peso ideal"
- Entre 25 y 30: "Sobrepeso o exceso de peso"
- Entre 30 y 35: "Obesidad leve"
- Entre 35 y 40: "Obesidad moderada"
- Por encima de 40: "Obesidad mórbida"
Para calcular el IMC emplea la siguiente fórmula:
lunes, 5 de septiembre de 2011
Archivos principales de un proyecto Android en NetBeans
MainActivity.java: es la actividad principal de nuestra aplicación; en otras palabras, es la clase que se inicia al ejecutarse nuestra app. Justo cuando acabamos de crear nuestro proyecto la clase sólo contiene esto:
R.java: esta clase sirve para encontrar los recursos de datos que se generen en la aplicación. Esta clase nunca debe modificarse manualmente ya que se genera automáticamente cada vez que compilamos o en el momento que ingresamos un nuevo recurso en algún archivo; inicialmente contiene esto:
main.xml: este archivo nos sirve para declarar o posicionar los objetos como botones, vistas, textos, inputs etc. Se basa en tags o etiquetas al estilo de HTML; inicialmente sólo tiene un objeto "TextView" con la leyenda "Hello Android from NetBeans". Básicamente este archivo es el que muestra todo lo que vemos en pantalla. Se pueden tener varios archivos de este tipo en la carpeta layout si se quiere tener más de una vista diferente.
Strings.xml: este archivo se utiliza para crear recursos estáticos de variables u otras cosas, como por ejemplo el nombre de la app o valores iniciales para algún input, en este caso solo tengo una string con el nombre de mi app.
AndroidManifest.xml: el archivo donde se indica qué actividad será la principal, cuales serán los intents, el nombre de versión, el nombre de aplicación y el icono que usará su aplicación, entre otros aspectos descriptivos de la aplicación.
Estos serían, grosso modo, los archivos principales de un proyecto en Android.
Instalación y puesta a punto de Android sobre NetBeans 7
1. Suponiendo que ya tienes instalado NetBeans 7.0.1 y el JDK SE 7 de Oracle descarga el SDK de Android http://developer.android.com/sdk/index.html más apropiado para la plataforma que estes utilizando.
2. En un entorno Windows típico descarga el archivo de instalación installer_r12-windows.exe
3. Ejecútalo. Si por casualidad no detecta la instalación del JDK de Java SE a pesar de haberlo instalado correctamente, prueba a pulsar BACK y después NEXT para forzar el refresco de la pantalla y poder así continuar el proceso.
5. Empieza la descarga después de aceptar todo (Acept all) y pulsar Install. Le llevará varios minutos. No desesperes. Si al final pide reiniciar el servicio pulsa Yes.
6. Ahora vamos a coger el IDE y configurarlo para que lance nuestra aplicación Android. Para ello abrimos NetBeans y nos vamos a Tools>Plugins>Settings>Add ponemos un nombre (por ej. Android) y en la URL ponemos http://kenai.com/projects/nbandroid/downloads/download/updatecenter/updates.xml
7. En Available Plugins ingresamos "android" en el campo de texto de búsqueda o lo buscamos directamente en la lista. Marca la casilla de verificación del plugin Android, una vez localizado, y luego haz clic en el botón de la parte inferior Install.
8. Presiona Next en la pantalla que te aparecerá, acepta la licencia, presiona continue e ignora los avisos que te muestre.
9. En el panel de Services podemos observar ya el Servicio de Android con su icono verde característico.
10.- Debes indicar a NetBeans dónde encontrar el SDK de Android. Hay que dirigirse al menú Tools>Options. En el apartado Miscellaneous busca la pestaña Android y en SDK location indica la ruta del mismo que por defecto es c:\Archiv~1\Android\android-sdk. Es importantísimo que utilices el formato de ocho caracteres Archiv~1 típico de MS-DOS para referirte a Archivos de Programa pues Android no funciona cuando se indican rutas que incluyan espacios.
11. Para crear un emulador de dispositivo Android nos dirigimos al menú Tools>Android SDK and AVD manager. En la pestaña Virtual Devices selecciona New. Al crear este dispositivo virtual vamos a darle un nombre como AVD01 y 1Gb de moria para la SD. En target, utilizaremos en principio la API Level 10. En Built-in selecciona HVGA. Más tarde añadiremos el hardware necesario pero de momento quédate con el hardware listado por defecto.
12. Vamos a crear un nuevo proyecto de tipo Android. File>New Project y seleccionamos Android; elegimos un nombre y Finish. (La ruta del proyecto no debe contener espacios; así que cuidado con carpetas como Documents and Settings que puedan dar problemas. En cuanto al nombre del paquete debe tener al menos dos partes como "es.anexo4" )
13. Vamos a crear una sencilla aplicación de Hola Mundo. Para ello creamos un objeto TextView (campo de texto) que referenciaremos para mostrar en él el mensaje "Hello, Android " en el emulador de Android. No olvides añadir una librería: import android.widget.TextView;
El codigo nos quedaría:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(“Hello, Android”);
setContentView(tv);
}
}
14. Al Correr el proyecto (como si fuera cualquier aplicación) obtendremos la siguiente salida:
15. Debemos esperar un tiempo hasta que se cargue el emulador y si aparece algún error vuelve a ejecutar el proyecto y obtendrás el "Hello, Android". No es necesario que abras y cierres el emulador cada vez que ejecutes el proyecto. Lo ideal es mantener siempre el emulador abierto y aprovecharlo para múltiples ejecuciones, especialmente si se tiene en cuenta que tarda bastante en cargarse.