domingo, 26 de enero de 2014

BroadcastReceiver

BroadcastReceiver

Un broadcastReceiver es un componente que está destinado a recibir y responder ante eventos globales generados por el sistema. como por ejemplo: Bateria baja, llamada entrante, sms recibido... o por otras aplicaciones.

Para registrar un broadcastreceiver existen dos técnicas:


  • Implementar un elemento <receiver> en el archivo AndroidManifest.xml, donde escribiremos el nombre de la clase BroadcastReceiver y enumeramos sus IntentFilter.
  • Realizando en tiempo de ejecución mediante el método registerReceiver de la clase Context.

Igual que ocurre con Service, broadcastReceiver:
  • no tiene IU
  • el código ejecutado en el onReceive() del BroadcastReceiver no debe asumir operaciones de persistencia o de ejecución prolongada.

Ejemplo de funcionamiento:

Interceptar eventos Android. Vamos hacer que el sistema capture el texto de SMS y el emisor de dicho mensaje SMS.

1) Antes de empezar a programar suscribimos este tipo de evento.

Creamos proyecto, lo llamamos: jamelgasBroadcastReceiver.

Una vez creado modificamos el AndroidManifest.xml:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jamelgas.ejemplo.BroadcastReceiver" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="BroacastReceiver" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="RecibirSMSEntrante">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

</application>

<uses-permission android:name="android.permission.RECEIVE_SMS" />

</manifest>


Hasta ahora lo que se ha realizado es dar permisos a la aplicación para interceptar los mensajes mediante el uses-permission e implementar la clase RecivierSMSEntrante.java que se hereda de BroadcastReceiver.

package com.jamelgas.ejemplo.BroadcastReceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsMessage;
import android.util.Log;
public class RecibirSMSEntrante extends BroadcastReceiver {
 private final static String LOGTAG = "RecibirSMSEntrante";
 @Override
 public void onReceive(Context context, Intent intent) {
  Log.d(LOGTAG, "SMS recibido");
  Bundle bundle = intent.getExtras();
  if (bundle != null) {
   Object[] pdus = (Object[]) bundle.get("pdus");
   final SmsMessage[] messages = new SmsMessage[pdus.length];
   for (int i = 0; i < pdus.length; i++) {
    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
    
    String idMensaje = messages[i].getOriginatingAddress();
    String textoMensaje = messages[i].getMessageBody();
    
    Log.d(LOGTAG, "Mensaje recibido: id="+idMensaje+" texto="+textoMensaje);
    
   }
  }
 }
}


El fichero MainActivity.java principal le he llamado BroadcastReceive.java

package com.jamelgas.ejemplo.BroadcastReceiver;

import com.jamelgas.ejemplo.BroadcastReceiver.R;

import android.app.Activity;
import android.os.Bundle;

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


1) Esta aplicación se ejecutará de una manera diferente ya que vamos a realizar un envío de SMS para eso voy usar el perfil DDMS de eclipse.

2) En la opción de emular SMS en "Telephony Actions" enviamos el SMS.

3) Y en LogCat de DDMS vemos a modo de log en tiempo real con su PID asociado como capturamos el id y el mensaje de texto que hemos enviado.

Nota: Como no dispone de IU si lo intentamos ejecutar como aplicación en el emulador nos dará un error.









 

jueves, 27 de junio de 2013

Conceptos Generales Android. Archivo AndroidManifest.xml


SISTEMA OPERATIVO ANDROID

  • Un sistema operativo basado en linux con una interface de programación en Java.
  • Plataforma independiente del dispositivo. Desarrollar aplicaciones para varios dispositivos.
  • Plataforma de código abierto. http://source.android.com/
  • Disponibilidad de herramientas. 
    • Compilador
    • Depurador
    • Emulador de dispositivo
    • Propia maquina virtual Java ( Dalvik Virtual Machine - DVM)
  • Android con soporte para:
    • graficos 2D y 3D usando librerias de OpenGL
    • almacenamiento de datos en una base de datos SQLite.
  • Android se ejecuta en su propio proceso. Aplicación aislada de otras aplicaciones. 

SDK DE ANDROID. DESARROLLO DE ANDROID. COMPONENTES DE UNA APLICACIÓN

ARCHIVO AndroidManifest.xml

Archivo presente en todas las aplicaciones donde se especifican los componentes de la aplicación así como su configuración global.

Contiene:

  • Se describen los nombres de los paquetes java que tiene la aplicación. Este nombre es como un identificador único para la solicitud.
  • Describe los componentes de nuestra aplicación: Activities, Services, Broadcast Receivers, y Content Providers.
  • Determina que proceso manejara los componentes de la aplicación.
  • Especifica los permisos con los que contara la aplicación.
  • Declara las especificaciones mínimas en cuanto a versiones de APIs.
  • Declara las librerías que la aplicación necesitar y que deben estar enlazadas.



Estructura del archivo AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
        </provider>

        <uses-library />

    </application>

</manifest>


Componentes 



 Parte de un sistema Android

  • Activities (Actividades)
    • Activity es la parte del código que interactua con el usuario.
    • Las actividades:
      • Se apilan
      • sólo una es visible
      • sólo una esta activa
      • Se apilan encima según aparecen.
    • Es un componente de Android que proporciona una ventana de la aplicación, con la que los usuarios pueden interactuar para realizar una acción, como buscar contacto, marcar un teléfono  realizar una foto, enviar un mail o ver una foto.
    • Representa la capa de representación. (Ej. Pantalla del usuario).
    • Las apliaciones de Android crea una o mas actividades.Y se puede cambiar entre ellas en tiempo de ejecución.
    • Al menos tiene que contener una actividad la apliación.
    • Son contenedores para UI (User Interface - Interfaz de usuario). Es como un form para windows.
    • Cada una de las actividades, conlleva una pantalla o ventana en la que se dibuja su interfaz de usuario. Dicha pantalla o ventana puede rellenar toda la pantalla del dispositivo, pero también puede ser de menor tamaño o incluso flotar en la parte superior de otra ventanas.
    • Esta clase crea una ventana que muestra una interfaz de usuario, la cual está definida a su vez en una instancia de otra clase, la clase view.
    • El estado de las actividades:
      • Activa
        • Encima de la pila
      • Pausada
        • Sin foco, todavía visible
      • Parada
        • No visible
        • Puede eliminarse en caso de pocos recursos.
      • En destrucción
        • Se ha notificado su destrucción. 
    • Ciclo de vida de una aplicación Android.



    • Views (Vistas)
      • Un view es un elemento básico de UI. (Ej. es el reponsable de dibujar el área rectangular de la pantalla y así como enganchar elementos (ContextMenu, Menu, View, SurfaceView...)
      • La UI es contruida con clases widget que son heredadas (inherent) de android.view.View. Saben como dibujarse.
      • Responden a eventos
      • Organizados en árboles para construir el GUI.
      • Descritos en XML en los recursos de layaout.
      • Views y ViewGroups construyen complejos GUIs 
      • El Framework de Android es responsable de:
        • Medidas
        • Emplazamientos
        • Dibujado

    Jerarquia de clases View



    •  Intents (interaciones)
      • Descripción abstracta de una operación. Permite especificar la Actividad a invocar.
      • Describe lo que la aplicación quiere.
      • Se asocian una acción, unos datos y una categoria.
        • Las actividades declaran las acciones que pueden llevar a cabo y los tipos de datos que pueden gestionar. La categoría indica si la actividad se arranca desde el lanzador de aplicaciones o desde otra actividad. Es decir, essta compuesto de una acción y datos que se llevan a cabo (View, Edit...). La acción se lleva a cabo cuando "intents" es requerido y los datos son los datos para operar. (Ej:  Datos del item del contacto).
      • Son mensajes asíncronos que permiten a la aplicación solicitar funcionalidad de otros servicios o actividades.
      • Constituyen el núcleo de los mensajes del sistema que corren en Android.
      • Son usados cuando empiezan las actividades y para la comunicación entre diversas partes del sistema Android.
      • Las aplicaciones pueden transmitir intents (mandar mensajes) o recibir intents (registrar mensajes)
      • Las apliaciones pueden realizar:
        • intents explícita: la aplicación llama directamente a un servicio o una actividad.
        • intents implicita: la aplicación pide al sistema android de los servicios registrados y aplicaciones para un intents. (ej. una aplicación puede pedir via intents para una aplicación de contacto).
    • Services (servicios)
      • Se ejecutan en segundo plano (background) sin necesidad de ofrecer un UI. (Ej: music player mientras miras un mail, o un contador que vaya contando en decimal mientra estas con otras aplicaciones de mail,...)
      • No interactuan con el usuario
      • Ejecutan en el hilo principal del proceso
      • Se mantiene en ejecución mientras se: arranque o tenga conexiones.
    • Notificaciones
      • Alertan al usuario de eventos.
      • Se envia a través del NotificationManager. (Es un entorno de aplicacion en arquitectura de android )
      • Tipos:
        • iconos persistentes
        • LEDs encendidos
        • Sonidos y vibraciones
    • Proveedores de contenidos
      • Los contentProviders son objetos para:
        • obtener datos
        • Almacenar datos
      • Datos disponibles para todas las aplicaciones
      • UNICO modo de compartir información entre aplicaciones.
      • Normalmente, SQLite
      • Poco acople con clientes.
      • Acceso a través de URI( localizadores e identificadores uniformes de recursos. Acceso unico).


      Notas:

      Aplicación de Android es subclase de Activity y esta es subclase de Context con lo que la aplicación de java es a su vez subclase de Context. Por lo que la clase de la aplicación que creemos es un contexto valido para android y podemos referenciar esta con this a la hora de instan-ciar un objeto view



      martes, 23 de abril de 2013

      Como crear un proyecto Android

      CREACIÓN ANDROID APPLICATION PROYECT

      Crear un proyecto de aplicación Android:


      • Click File > New > Android Application Project
            (si no se ve esta opción, click File > New > Other, ahi abrir la carpeta Android y seleccionar Android Application Project)

      • A continuación nos guiará un "wizard" para crear proyecto de apliación Android.



      PUESTA EN MARCHA: INSTALACIÓN 2º PARTE

      INSTALACIÓN ECLIPSE INTEGRADO CON ANDROID:

      En la web http://developer.android.com/sdk/index.html descargamos ADT Bundle esta versión incluye todo lo que necesitamos para el desarrollo de aplicaciones Android:



      • Eclipse + ADT plugin
      • Android SDK Tools
      • Android Platform-tools
      • The latest Android platform
      • The latest Android system image for the emulator



      En nuestro caso descargaremos la versión de 32 bit para el sistema operativo windows:


      Windows 32-bit ---> adt-bundle-windows-x86-20130219.zip



      Una vez descargado, descomprimimos y movemos la carpeta a donde nosotros queramos. Y ya podemos ejecutar directamente IDE Eclipse.

      Nota técnica que te puede ocurrir:

      Al descargar la última versión, la primera vez que lo utilizas accedemos a eclipse perfectamente. Pero al cargar una segunda vez después de apagar el equipo, a muchos usuarios les ocurre que al arrancar eclipse les indica que no encuentra el path para arrancar la consola de javaw.exe que esta en el directorio bin de la ruta de java anotado en el sistema.  Lo único que tienes que hacer es en las variables de entorno del sistema: Equipo > Propiedades del equipo >  Protecion del sistema > pestaña de opciones avanzadas > variables de entorno. Modificar el path para añdir la ruta donde esta la version de java intalada en el equipo. Eje:  C:\Program Files (x86)\Java\jre6

      lunes, 15 de abril de 2013

      Probar aplicaciones con AVD o dispositivo real



      PROBAR LAS APLICACIONES CON AVD o CON UN DISPOSITIVO FÍSICO.


      DISPOSITIVO FISICO ANDROID


      Dispositivos con Sistema Operativo Android. Para poder realizar las pruebas directamente en el dispositivo.

      Activar el modo “Depuración USB” en el menú del móvil. (Por defecto se encuentra en menú de ajustes > Aplicaciones > Desarrollo. Y ahí activar el modo “Depuración USB”.)

      SELECCIÓN DEL EMULADOR


      Por defecto, se encuentra configurado para que se ejecute directamente en el emulador.
      Si queremos ver lo que hemos creado en el dispositivo real. Debemos acceder al menú Run > Run Configurations … En la ventana , en la parte izquierda seleccionamos “Android Application”  y allí el proyecto que estamos desarrollando. Después, en la parte central seleccionamos la pestaña de “Tarjet” y seleccionamos “Manual”.
      Así la próxima vez que compilemos nos preguntará en que dispositivos queremos ejecutar la aplicación.

      NOTA: El hecho que la aplicación se ejecute bien en el emulador no garantiza que funcione correctamente en el dispositivo.


      CREAR UN EMULADOR AVD

      El dispositivo Virtual Android (AVD) es un emulador de un dispositivo real de android.

      Eclipse > botón “Android SDK y AVD Manager” Pulsamos sobre New y ahí rellenamos:
      -          Name:  es el nombre del emulador
      -          Target : mínimo dispositivo necesario para la ejecutar la aplicación
      -          Size: tamaño de la tarjeta SD que se emulará para el dispositivo
      -          Built-in resolución de la pantalla
            -       Hardware :  dejar lo que sale por defecto