Iniciación a Android

download Iniciación a Android

If you can't read please download the document

description

Introducción a creación de aplicaciones Android.

Transcript of Iniciación a Android

Programacin Androidmartes 29 de mayo de 12

PresentacinProfesor/Formador Analista-programador etc.... Y vosotros?

martes 29 de mayo de 12

Introduccin2005 - Google Inc. adquiere a Android Inc. La idea era entrar en el mercado de dispositivos mviles. La idea actual es unicar todos los sistemas operativos de los dispositivos mviles.

martes 29 de mayo de 12

ActualidadAndroid est subiendo su cuota en el mercado. Se demandan cada vez distintos tipos de aplicaciones a parte del Angry Birds Las aplicaciones tradicionales empiezan a exigir sus presencias por todas partes. Cualquiera puede hacer negocio con sus aplicaciones de Android. El ndice de piratera es muy inferior al de los softwares de ordenadores. Muchos clientes de iPhone quieren que sus aplicaciones tambin estn presentes en Android.martes 29 de mayo de 12

Lenguaje de programacinEl lenguaje elegido para desarrollo de aplicaciones de Android. Una vez compilado el cdigo fuente se recompila los .class para pasarlos a cdigo DEX Se ejecuta con DalvikVM, en lugar del JRE.

martes 29 de mayo de 12

LinuxEl sistema operativo de los sistemas Android es Linux. Este Linux est muy tocado, lo que signica que las aplicaciones de linux pueden no funcionar en Android El sistema grco no son las X. Cada aplicacin se ejecuta con un ID de usuario distinto.martes 29 de mayo de 12

IDE y componentes

Para programar en Android se recomienda utilizar el Eclipse Es necesario descargar el Android SDK ADT para nalizar debemos instalar el ADT.

martes 29 de mayo de 12

SimuladorEl SDK viene con un simulador para probar nuestras aplicaciones. Ventajas: permite probar en diferentes versiones, permite descargar la base de datos, etc... Desventajas: Determinadas caractersticas no se puede probar con el simulador, por ejemplo el Bluetooth.

martes 29 de mayo de 12

INSTALACIN

martes 29 de mayo de 12

Componentesmartes 29 de mayo de 12

ActivityComponente que ensea una pantalla al usuario. Sera equivalente a una ventana (no es lo mismo). Una activity puede tener varios estados a lo largo de una ejecucin Normalmente una aplicacin tiene como mnimo una Activity.

martes 29 de mayo de 12

Intent

Forma de comunicar los componentes Para arrancar una activity es necesario crear un Intent. Un intent puede llevar cualquier tipo de informacin al componente que est arrancando.

martes 29 de mayo de 12

Services

Sistema que tiene Android para ejecutar procesos en background. No tienen interfaz grca. Siguen funcionando aunque est corriendo una activity de otra aplicacin.

martes 29 de mayo de 12

Broadcast Receiver

Componentes que actan cuando hay un mensaje para todo el dispositivo. Est pensado para detectar bateras bajas, llamadas entrantes y etc. Una aplicacin pueden enviar un Broadcast

martes 29 de mayo de 12

Content Providers

Formas de pasar la informacin de una aplicacin a otra. Pensado para enviar informaciones como el nmero de telfono, direccin y etc. La idea es no utilizar la base de datos como intermediario.

martes 29 de mayo de 12

R

Los cheros R contienen todos los ids de los componentes grabados en archivos XML. Su cdigo fuente debe ser creado por el IDE y no deberamos tocar ah. En caso de desincrona se puede eliminar este chero para que se vuelva a generar.

martes 29 de mayo de 12

ViewEn Android los componentes grcos se llaman View. Un boton y un textview por ejemplo son ejemplos de view. Para accederlos debemos asignarles un id y posteriormente acceder a su objeto con ndViewById. Los views que permiten a su vez tener otros views internos se llaman ViewGroup.

martes 29 de mayo de 12

LayoutXML compilado que contiene las propiedades grcas de nuestra activity. Es este contenedor es donde debemos poner nuestros componentes. Existen varios tipos de Layout, debemos elegir uno llevando en consideracin que pueden variar las resoluciones Normalmente se especica el layout al crear la activity.

martes 29 de mayo de 12

AndroidManifestArchivo de conguracin de la aplicacin. Es un archivo en formato XML. Contiene la informaciones como cual es la activity principal, cuales activities existen, versin de Android requerida. Si este archivo est mal formado la aplicacin no se compila.

martes 29 de mayo de 12

StringsFichero usado para denir todas las cadenas. Pensado para reaprovechar las cadenas, localizarlas ms rpidamente y para trabajar con internacionalizaciones. Podemos especicar cadenas, colores, dimensiones y otros datos. Para usar una cadena en un atributo debemos utilizar el patrn @string/nombre

martes 29 de mayo de 12

Propiedades

Cada View tiene diversas propiedades. Estas propiedades indican como tiene que ser apariencia o como se tienen que comportar. Algunas de estas propiedades aparecen en distintos views o otras son especcas.

martes 29 de mayo de 12

PropiedadesLayout_width y Layout_height Valores: match_parent, wrap_content Sirve para decir cual es el ancho y alto de un componente Layout_margin_left, layout_margin_top, layout_margin_right, layout_margin_botton Valor en px, o pt Sirve para decir cuanto se deja de margenmartes 29 de mayo de 12

PropiedadesLayout_gravity valores: top, botton, center_vertical, left, right, center Alineacin del view Background valores: color Cambia el color de fondo o la imagen de fondo.

martes 29 de mayo de 12

PropiedadesVisibility Valores: VISIBLE, INVISIBLE, GONE Permite mostrar u ocultar una view. INVISIBLE - no se muestra el componente pero ocupa espacio GONE - no se muestra el componente ni ocupa espacio.

martes 29 de mayo de 12

ClickEvento equivalente al clic del ratn o cuando damos con el dedo Debemos marcar el evento con la propiedad onClick La activity debe tener el mtodo indicado en el onClick La cabecera de la funcin debe ser del estilo void nombre(View view)

martes 29 de mayo de 12

PRCTICA JUEGO DE LA MEMORIA

martes 29 de mayo de 12

Finish

Cuando necesitamos terminar una activity. El nish es un mtodo que est en todas las actividades. Recordemos que antes de nalizar conviene cerrar cheros, sockets, etc...

martes 29 de mayo de 12

Arrancando otra activityPrimero debemos crear una activity con la implementacin de su mtodo onCreate Creamos un intent con el objeto que lo arranca y la clase que lo arrancar. arrancamos el intent con startActivity. No debemos olvidarnos de poner la activity en el archivo AndroidManifest

martes 29 de mayo de 12

LogEl log nos permite facilitar la depuracin. Todo lo que se enva al Log se enva a su apartado correspondiente. Tenemos los apartados: verbose, info, error, warn etc... No abusar del log, de lo contrario ser difcil depurar

martes 29 de mayo de 12

Ciclo de vida de una activityonCreate - No ms arrancar la activity onResume - cuando una activity que estaba parada vuelve a funcionar onPause - Cuando abandonamos la activity pero todava no est destruida onDestroy - Cuando la activity deja de existir.

martes 29 de mayo de 12

Mensajes

martes 29 de mayo de 12

Toast

martes 29 de mayo de 12

ToastCuadro que da una informacin al usuario Este cuadro no se vincula a la activity actual. Primero debemos crear un Toast.makeText, y despus ejecutarlo con show(). Podemos denir las duracin podemos mostrarlo con Toast.LENGTH_LONG y Toast.LENGTH_SHORT Los toasts no se sobreponen sino que salen en secuencia

martes 29 de mayo de 12

Gravity

Es posible indicar la posicin de un toast con setGravity. Los posibles valores del primer parmetro son: Gravity.TOP, Gravity.CENTER.... El segundo parmetro es para dejar un desplazamiento a la izquierda y el tercero un desplazamiento desde arriba.

martes 29 de mayo de 12

Toast PersonalizadoPodemos crear un elemento de tipo view y ponerlo en el toast con setview Para toasts ms complejos primero debemos disear un layout. LayoutInater inater = getLayoutInater(); View v = inater.inate(R.layout.nombrexml, (ViewGroup) ndViewById(R.id.id_layout)); Poner este ltimo objeto com view del toast

martes 29 de mayo de 12

Alert

martes 29 de mayo de 12

AlertasMensajes donde el usuario debe presionar un botn para que desaparezca Existen 3 respuestas: botn positivo, botn negativo y el botn neutral La clase a usar se llama AlertDialog Para crear un AlertDialog usamos un AlertDialog.Builder. setMessage -> indica el mensaje a mostrar setCancelable -> para indicar si de puede cancelar con escape. setTitle -> indica el ttulomartes 29 de mayo de 12

AlertssetPositiveButton, setNegativeButton, setNeutralButton -> Indica la accin a tomar con respectivo boton. Dicha accin debe ser del tipo DialogInterface.OnClickListener Para actuar sobre el dialogo debemos usar el primer parmetro del mtodo onClick

martes 29 de mayo de 12

ItemsCon un alert podemos dar una lista de opciones al usuario. usamos el mtodo setItems pasndole como parmetro un array de String En este caso debemos jarnos en el segundo parmetro que el item seleccionado. No se debera mezclar items con mensajes

martes 29 de mayo de 12

SingleChoice y MultiChoiceCon setSingleChoiceItems y setMultiChoiceItems hace que el usuario tenga que dar al ok para cerrar el cuadro. El SingleChoice se muestra con RadioButtons El MultiChoice se muestra con CheckBoxes Una buena prctica es poner el array de String en Strings.xml Para recibir dicho array se puede usar getResources().getStringArray(id);

martes 29 de mayo de 12

Manteniendo el estado

Cuando seleccionamos un item ste se mantiene seleccionado para la siguiente vez que se quiera abrir el alerta. Para ello no se debe reinstanciar el AlertDialog. Evitar la reinstancin es un bueno para el rendimiento.

martes 29 de mayo de 12

Dialogos ConocidosSi estamos seguro que habr usar un dilogo podemos utilizar el mtodo Dialog onCreateDialog(int id) De esta forma no reinstanciamos cada vez que lo vayamos a usar. Para mostrarlos debemos pasar por el mtodo void onPrepareDialog(int id, Dialog dialog) Para llamar al dialogo debemos utilizar el mtodo showDialog(int id);

martes 29 de mayo de 12

Progress Dialogmartes 29 de mayo de 12

Dilogo de progresoPara procesos largos que no deben tener interaccin de un usuario. Para trabajar con progressdialog necesitamos crear un hilo aparte. Es posible comunicar este hilo con la activity a travs de un handler. Podemos marcar el estilo con setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)

martes 29 de mayo de 12

Handler MessagePara enviar informacin desde el hilo a la activity es necesario traspasar un mensaje a travs del handler. El metodo obtainMessage nos devuelve el objeto que tenemos que usar Los atributos arg1, arg2 y obj permiten poner la informacin que deseamos enviar. con sendMessage enviamos el mensaje.

martes 29 de mayo de 12

Mens

martes 29 de mayo de 12

MensUn men es un recurso En Android existen 3 tipos de mens: De opciones De contexto Submenus Es necesario inar el mens, a estilo de como se hacia con los layout

martes 29 de mayo de 12

Men de OpcionesEl que se usa con el botn de men de la aplicacin. Crear un men en el directorio de recursos. Crear cada item con su id correspondiente, su ttulo y su ttulo reducido Utilizar el mtodo boolean onCreateOptionsMenu(Menu menu) para instanciarlo/inarlo Utilizar el mtodo getMenuInater().inate(R.menu.nombremenu, menu)

martes 29 de mayo de 12

Actuar segn eleccin

Cuando el usuario elija una opcin del men automticamente pasaremos por el mtodo boolean onOptionsItemSelected(MenuItem item) con getItemId() podemos saber cual fue la opcin elegida y comparar con los ids de R

martes 29 de mayo de 12

IconosSe puede indicar los iconos poniendo iconos en la parte de recursos. Con un XML de seleccin se puede cambiar el icono. Debemos marcar el atributo state_enabled a true o false El icono pasa a ser el selector.

martes 29 de mayo de 12

ContextoSe aplican sobre un objeto Normalmente son mens que se acceden con un Long Clic Debemos crear un men de la misma forma que lo hacamos con uno de opciones Debemos utilizar el mtodo void onCreateContextMenu(Context menu, View view, ContextMenuInfo contextMenuInfo) para inarlo Llamar siempre al mismo mtodo de la clase padre.

martes 29 de mayo de 12

ItemUsar el mtodo boolean onContextItemSelected(MenuItem item) para saber la eleccin. Para vincular simplemente debemos vincular el men con el objeto con registerForContextMenu Normalmente la operacin anterior se hace en el onCreate de la Activity.

martes 29 de mayo de 12

SubmenCuando un item de un men tiene otras opciones Puede ser un submen de un men de opciones o de contexto. el truco est en poner un item de men con un men interno en el XML No estamos obligados a utilizar esta forma, muchas aplicaciones hacen sus submens con dilogos o similares. Una buena prctica es utilizar el setIntent cuando tenemos muchos mens.

martes 29 de mayo de 12

Layouts

martes 29 de mayo de 12

LayoutSon gestores de distribuciones Heredan de ViewGroup Existen varios tipos de Layout: LinearLayout, TableLayout, TabLayout, AbsoluteLayout, FrameLayout, etc... Existen otros ViewGroup que no son layouts.

martes 29 de mayo de 12

Posicionamiento y tamao

Para muchos controles podemos utilizar tamaos relativos y otros absolutos. Para los relativos se puede usar wrap_content y match_parent Para tamaos absolutos se puede usar: dip, px, pt, in, mm

martes 29 de mayo de 12

Linear Layout

Layout donde los elementos se distribuyen de forma secuencial. Los elementos pueden posicionarse horizontalmente o verticalmente. (orientation) Con Layout_Weight podemos decir cual es la proporcin del layout que ocupa el elemento.

martes 29 de mayo de 12

Relative LayoutCuando posicionamos las views con valores relativos a otras view Layout_below - indica que este view debe situarse debajo del elemento indicado Layout_alignParentRight (t/f)- El elemento debe situarse a la derecha tomando como referencia el view indicado Layout_marginLeft -> Espacio desde la izquierda.

martes 29 de mayo de 12

FrameLayout

Layout que solapa todos los elementos. muy til para hacer efectos como poner texto sobre imgenes. El desplazamiento de los elementos siempre se hace respecto al layout.

martes 29 de mayo de 12

Table LayoutCuando distribuimos en celdas. Solo sirven para hacer distribucin, no puede dibujar sus bordes Cada view sera una celda distinta Para especicar mejor el elemento se puede usar con layout_column Layout_span - permite invadir las celdas horizontales.

martes 29 de mayo de 12

Tab layoutLayout que permite tener pestaas. En el XML debemos tener como primera etiqueta un TabHost con id tabhost Dentro del TabHost debemos tener un linear layout con un TabWidget y un FrameLayout El TabWidget y el FrameLayout tienen que tener el id tabs y tabcontent respectivamente Cada pestaa tendr una activity distinta.

martes 29 de mayo de 12

Tab Layout - Activity y pestaasSu Activity debe ser de tipo TabActivity. Para recibir su TabHost debemos usar el mtodo getTabHost() TabHost.TabSpec - Clase que representa a las pestaas y se instancia con newTabSpec(Texto) con setIndicator podemos cambiar su texto y poner su icono. con setContent indicamos el intent que se ejecutar. Se aade al TabHost con addTab.martes 29 de mayo de 12

TabHost - DetallesSe pueden usar selectores para que tenga iconos distintos, segn el estado. con setCurrentTab indicamos cual es el tab que est seleccionado. No podemos olvidarnos de incluir cada activity en AndroidManifest Podemos omitir el titulo poniendo en el theme de la actividad NoTitleBar para ahorrar espacio

martes 29 de mayo de 12

ScrollViewCuando tenemos elementos que no caben en pantalla. No es un layout, pero suele venir junto a un layout Cuidado que si lo ponemos directamente en un XML debemos ponerle el namespace Con HorizontalScrollView podemos movernos horizontalmente

martes 29 de mayo de 12

Absolute layoutLayout que permite posicionar cara elemento en una posicin ja. Cuidado que se puede ver de forma muy distinta con distintas resoluciones. Con Layout_X y Layout_Y podemos indicar cual es su posicin. Cada view puede utilizar el mtodo layout(x,y,left, top) para posicionarlo.

martes 29 de mayo de 12

DATOS

martes 29 de mayo de 12

SQLite

martes 29 de mayo de 12

SQLiteEn Android existen diversas bases de datos con las que podemos trabajar. Existe la posibilidad de trabajar con bases de datos remotas. SQLite es una motor de base de datos que no se basa en cliente-servidor. Motor existente en todas las versiones de Android SGBD sencillo pero suciente para almacenar datos de una aplicacin local

martes 29 de mayo de 12

CaractersticasBase de datos centralizada en 1 chero. Permite transacciones No tiene lenguaje de procedimiento almacenados No permite mltiples conexiones. No ideal para almacenamiento masivo. Acepta triggers before, after e instead of

martes 29 de mayo de 12

JDBC

El uso de JDBC en Android no est documentado oficialmente Su uso no se recomendado, en su lugar se debera buscar drivers que usan android.database. Caso de no haber ms opcin sera necesario usar los drivers de nivel 3.

martes 29 de mayo de 12

SQLiteOpenHelperDebe ser importado desde android.database.sqlite Clase que nos permite crear y actualizar la base de datos. Encargada de guardar el archivo en su sitio correspondiente. Muy importante para aplicaciones tendrn nuevas versiones.

martes 29 de mayo de 12

MtodosSQLiteOpenHelper - constructor, importante tener la versin de la base de datos. getWritableDatabase - Devuelve la base de datos para lectura y escritura. onCreate - creacin de tablas y vistas. onUpgrade - En caso de nueva versin como debera actualizarse.

martes 29 de mayo de 12

Creacin de tablasCREATE TABLE (....) IF NOT EXISTS Constraints: Primary key, unique, check, foreign key. Tipos: integer, real, text, blob y NULL.

martes 29 de mayo de 12

Foreign key

Debe apuntar a campos que sean claves primarias o que tengan restriccin Unique. Acepta ON DELETE Y ON UPDATE con CASCADE, SET NULL, SET DEFAULT, RESTRICT NO ACTION [DEFERRABLE] INITIALLY DEFERRED

martes 29 de mayo de 12

AutoincrementForma de asignar un valor de secuencia a un campo automticamente Vlido solo para claves primarias Devuelve el rowid de la tabla Su valor mximo es de 64bits (9.223.372.036.854.775.807) No tiene porque aparecer solo nmeros correlativos

martes 29 de mayo de 12

SQLiteDatabaseClase que se vincula con la base de datos. execSQL - Ejecuta cualquier consulta que no sea select. insert - Permite hacer una consulta insert. update - ejecuta una consulta update delete - ejecuta una consulta delete.

martes 29 de mayo de 12

SelectPara obtener datos podemos usar el mtodo rawQuery Nos devuelve un objeto de la clase Cursor Con moveToNext podemos iterar sobre los elementos con getString y getLong podemos recibir un campo con getColumnIndex localizamos la posicion de un campo getCount devueve el nmero de registros devueltos

martes 29 de mayo de 12

queryPara aquellos que no desean escribir mucho sql. Los parmetros pasados a null signican que no se usan, excepto el nombre de las columnas que representa al *. tabla, nombre de las columnas, where, parmetros where, groupby, having, order by La idea del mtodo query es hacer un mtodo similar en los content providers.

martes 29 de mayo de 12

TransaccionesSQLite permite transacciones beginTransacction para indicar que empezamos a usar una transaccin. setTransactionSuccessful - indica que la transaccion se ha realizado correctamente y que en si nal debe ejecutar un commit; endTransaction - hace commit si fue marcada con setTransactionSuccessful sino hace un rollback

martes 29 de mayo de 12

Practica Diario del viajero

martes 29 de mayo de 12

Content Provider

martes 29 de mayo de 12

Content Provider

Los accesos a las bases de datos son privados de cada aplicacin Los Content Provider fueron creados para que las aplicaciones intercambien informacin sin pasar utilizar la base de datos como medio de intercambio. Los datos pueden provenir de distintas fuentes: BD, cheros, Sistema.

martes 29 de mayo de 12

Conceptos

Es necesario crear los siguientes mtodos para poder crear un Content Provider: query, update, insert, delete Content Resolver, el que sabe donde se encuentra en Content Provider. Normalmente es necesario tener permiso para ello, como el READ_CONTACTS

martes 29 de mayo de 12

Ejemplo: ContactosRecibir el ContentResolver con getContentResolver Pasamos ContactsContract.Contacts.CONTENT_URI al mtodo query recibimos el resultado en formato cursor Con ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER podemos recibir las columnas Repetimos la operacin con la URI ContactsContract.CommonDataKinds.Phone.CONTENT_URI

martes 29 de mayo de 12

Practica Listar telfonos de Madrid

martes 29 de mayo de 12

Content Provider

Los accesos a las bases de datos son privados de cada aplicacin Los Content Provider fueron creados para que las aplicaciones intercambien informacin sin pasar utilizar la base de datos como medio de intercambio. Los datos pueden provenir de distintas fuentes: BD, cheros, Sistema.

martes 29 de mayo de 12

Conceptos

Es necesario crear los siguientes mtodos para poder crear un Content Provider: query, update, insert, delete. Content Resolver, el que sabe donde se encuentra en Content Provider. Normalmente es necesario tener permiso para ello, como el READ_CONTACTS

martes 29 de mayo de 12

Content URILas URI del tipo Content son aquellas que identican datos del ContentProvider (authority). Tienen que llevar el nombre simblico del proveedor. La cadena content:// siempre est presente. A continuacin viene la tabla y sus ltros.

martes 29 de mayo de 12

Ejemplo: ContactosRecibir el ContentResolver con getContentResolver Pasamos ContactsContract.Contacts.CONTENT_URI al mtodo query recibimos el resultado en formato cursor Con ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER podemos recibir las columnas Repetimos la operacin con la URI ContactsContract.CommonDataKinds.Phone.CONTENT_URI

martes 29 de mayo de 12

Contacts

ContactsContract.Contacts.CONTENT_URI - Informaciones de los contactos ContactsContract.Contacts.DISPLAY_NAME - nombre del contacto ContactsContract.Contacts.HAS_PHONE_NUMBER - Si tiene telfono o no. ContactsContract.Contacts._ID - identicador del contacto.

martes 29 de mayo de 12

PhoneContactsContract.CommonDataKinds.Phone.CONTENT_URI - Telefonos de un contacto ContactsContract.CommonDataKinds.Phone.CONTACT_ID - id del contacto propietario del registro ContactsContract.CommonDataKinds.Phone.TYPE - Tipo (comparar con ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE y ContactsContract.CommonDataKinds.Phone.TYPE_HOME) ContactsContract.CommonDataKinds.Phone.NUMBER - Nmero de telfono en s.martes 29 de mayo de 12

EmailsContactsContract.CommonDataKinds.Email.CONTENT_URI - Uri que obtiene la lista de emails de un contacto ContactsContract.CommonDataKinds.Email.DATA - El email en s ContactsContract.CommonDataKinds.Email.TYPE - Tipo de email (comparar con ContactsContract.CommonDataKinds.Email.TYPE_WORK)

martes 29 de mayo de 12

Ejercicio Listar telfonos y mails

martes 29 de mayo de 12

Calendar ProviderEs posible acceder a los datos del calendario del usuario con el Calendar Provider. Para acceder a sus datos primero es necesario localizar un calendario. Posteriormente podemos buscar los eventos de dicho calendario. A partir de los eventos podemos localizar los asistentes, los recordatorios y las repeticiones. Es necesario pedir permiso android.permission.READ_CALENDAR y android.permission.WRITE_CALENDAR

martes 29 de mayo de 12

URICalendarContract.Calendars.CONTENT_URI - Tabla de calendario CalendarContract.Events.CONTENT_URI - Para recibir los eventos (se relaciona con el campos CALENDAR_ID) CalendarContract.Reminders.CONTENT_URI - Para obtener los recordatorios CalendarContract.Instances.CONTENT_URI - Muestra las repeticiones de un evento.

martes 29 de mayo de 12

Content Providers NativosA parte del los contactos y del calendario existen otros content providers nativos del Sistema Browser - permite leer y modicar los bookmarks, el historial de navegacin y las bsquedas. CallLog - permite conocer el historial de llamadas. MediaStore - Acceso multimedia, como fotos, videos y audio. Settings - Permite acceder a la conguracion, permite cambiar opciones como el tono de llamadas y etc.martes 29 de mayo de 12

Prctica Pequeo programa que permita crear eventos.

martes 29 de mayo de 12

Crear Content ProviderPodemos crear nuestro propio Content Provider para que otras aplicaciones tengan acceso a nuestro contenido. La forma de almacenar los datos es transparente para la aplicacin externa Esta clase debe tener los mtodos onCreate, query, insert, update, delete y getType Debemos tener nuestra propia Context URI. Es necesario registrar nuestro nuestra clase en el manifest, principalmente si deseamos exportar los datos.

martes 29 de mayo de 12

URIDebemos crear una cadena AUTHORITY (identicador nico). Normalmente se usa el nombre de la aplicacin + nombre de clase debemos crear un objeto URI del tipo content:// + AUTHORITY + / nombretabla Para comprobar si la URI es correcta debemos usar un comparador de URI de la clase UriMatcher con uriMatches.addUri, indicamos las URIs aceptas (AUTH+ TABLA + CAMPOS)

martes 29 de mayo de 12

PasosPoner el SQLiteOpenHelper en el Content Provider. Debemos crear una clase que herede de ContentProvider. Conviene utilizar un hashmap para relacionar las columnas. Implementar los mtodos necesarios

martes 29 de mayo de 12

onCreate

Cada vez que se crea un ContentProvider. Aunque no es un constructor lo normal es que se cargue los atributos, como la base de datos. Debe devolver true si no hubo fallos.

martes 29 de mayo de 12

getType

Mtodo que sirve para devolver una cadena para identicar que es lo que estamos buscando. Muy til para tener control de los campos accedidos Algunos programadores lanzan excepcin cuando no se acepta la URI.

martes 29 de mayo de 12

queryMtodo que busca devuelve los datos encontrados en formato Cursor. No debera modicar la base de datos. Recibe los siguientes parmetros: URI - mapa para llegar a la tabla Proyeccin - Columnas a recibir, nulo representa todas Where y sus parmetros - criterios de ltrados Order by - orden en el que aparecen los camposmartes 29 de mayo de 12

insert, delete, update

Mtodos que modican la base de datos. Siguen el mismo patrn de los de SQL. En casos de fallos conviene lanzar excepcin, normalmente del tipo IllegalArgumentException.

martes 29 de mayo de 12

AndroidManifest.xmlEn el manifest debemos insertar un nodo del tipo Provider. El nombre puede ser el nombre completo de la clase o simplemente .NombreClase En Authority debe ser el mismo que hemos utilizado en la clase Podemos poder diversos AUTHORITY.

martes 29 de mayo de 12

ClienteCon el adquireContentProviderClient(URI) podemos recibir el cliente. Una vez obtenido el content provider podemos usar sus mtodos (query, update, etc...) Recordemos que deberamos atrapar excepciones por si la otra aplicacin no est instalada.

martes 29 de mayo de 12

Prctica Hacer un Content Provider que devuelva las IP

martes 29 de mayo de 12

Shared Preferences

martes 29 de mayo de 12

SHARED PREFERENCESCuando necesitamos guardar solamente datos primitivos y Set Internamente se guardan en archivos XML cada activity puede acceder a las SharedPreferences con getPreferences() - cuando las preferencias son privadas de cada activity getSharedPreferences() - cuando queremos acceder a distintos archivos de preferencias.

martes 29 de mayo de 12

CAMBIANDOCon el mtodo contains verificamos si existe la clave o no Para cambiar su contenido se usa el mtodo edit(). El objeto devuelto es del interface SharedPreferences.Editor Con commit aplicamos los cambios. No hay rollback as que solo deberamos llamar al edit si estamos seguros del cambios

martes 29 de mayo de 12

LISTENERAl hacer un commit se puede informar cuales son los campos que han cambiado con registerOnSharedPreferenceChangeListener. Se pueden tener varios listeners. Caso se necesite quitar el listener con unregisterOnSharedPreferenceChangeListener. Consejo: utilizar el NotificationManager para informar aquellos objetos de cambios de valores.

martes 29 de mayo de 12

PREFERENCE FRAMEWORKPreferenceActivity es una clase heredada de listActivity

Para facilitar la creacin de interfaces de preferencia al usuario. Internamente siempre estar guardando en los SharedPreferences. El primer paso crear una activity del tipo PreferenceActivity Creamos un archivos de preferencias en res/xml Inflamos el archivos de preferencia con addPreferencesFromResource

martes 29 de mayo de 12

XML

Para crear un archivo de preferencias debemos simplemente emplezar con la etiqueta PreferenceScreen Para cada preferencia debemos usar un tipo de etiqueta. Podemos opcionalmente englobar cada apartado en categoras.

martes 29 de mayo de 12

ETIQUETASCheckBoxPreference -para valores booleanos EditTextPreference - tpico cuadro de texto DialogPreference - suelta un AlertDialog para que introduzcamos los elementos (no vlido para la version 2.2) ListPreference - Array de datos PreferenceCategory - Divide los elementos en categorias RingtonePreference - Forma de elegir un todo para una notificacin.martes 29 de mayo de 12

MTODOS

addPreferencesFromResource - Equivalente al setContentView. PreferenceManager.getDefaultSharedPreferences - Recibe los shared preferences independiente de la clase en la que sea. Es necesario recibir ApplicationContext para no haber problemas

martes 29 de mayo de 12

Intents

martes 29 de mayo de 12

IntentsComo ya conocemos los intents sirven para pedir la funcionalidad de otro componente, como arrancar otra activity. Pueden ser usados para ser enviar seales al sistema y que otros componentes se enteren de esta noticacin Un intent tambin puede transportar informacin, como por ejemplo si queremos abrir una web pueden transportar la URL.

martes 29 de mayo de 12

Tipos de Intents

Existen 2 tipos de Intents Explcitos: son aquellos que los instanciamos indicando el nombre del componente a ser arrancado Implcitos: son aquellos que no especicamos la clase, sino una accin.

martes 29 de mayo de 12

DatosLos intents implcitos siempre tienen el getAction y el getData. Todos los intents pueden llevar datos extras para el componente que lo usar. Para ellos existe el mtodo putExtra que trabaja con el formato clave valor. Para recibir estos datos debemos usar el mtodo getIntent().getExtras() y nos devuelve un objeto de la clase Bundle

martes 29 de mayo de 12

Arrancando activitiesPara llamar a una activity debemos simplemente llamarla con startActivity(El Intent) si no esperamos ninguna respuesta. Si necesitamos alguna respuesta es necesario arrancarla con startActivityForResult. Cuando la Subactivity termina puede guardar en un nuevo intent en setResult para indicar los resultados de la operacin. La activity original recibe la respuesta a travs del mtodo onActivityResult.

martes 29 de mayo de 12

Intent FiltersCuando nuestra aplicacin/activity corresponde a alguna funcionalidad del sistema debemos registrarla en el archivo AndroidManifest.xml De esta forma podemos hacer nuestro propio Dialer, Web browser o gestor de contactos. Es necesario especicar el action, la categora y el data. Si un componente no tiene intent lters signica que solo podr ser llamado explcitamente.

martes 29 de mayo de 12

Intents implcitos

Para llamar a un intent implcito solo necesitamos crear un intent con el action necesario (normalmente Intent.ACCION) y la uri correspondiente. Para cara tipo distinto es necesario registra los permisos en el AndroidManifest Las uri pueden ser formato http://, tel:, geo:, content://

martes 29 de mayo de 12

Prctica Lista Invitados

martes 29 de mayo de 12

Servicios

martes 29 de mayo de 12

ServicioComponente que se ejecuta en background. Pensado para procesos de larga duracin. No tiene parte grca y no interacta con el usuario. Los servicios pueden ser ejecutados en el mismo proceso o en un proceso a parte de la aplicacin.

martes 29 de mayo de 12

ProcesosPor defecto se ejecuta en el proceso de la aplicacin en el hilo principal. Se puede personalizar para que se ejecute en un proceso propio. Tareas muy largas en el hilo principal puede afectar a la aplicacin. Podemos ejecutar un servicio con Context.startService Podemos exponer un servicio con Contexto.bindService

martes 29 de mayo de 12

Ciclo de vidaonCreate - al crear el servicio, necesario para inicializar. onBind - cuando un actividad ha hecho bindService onStartCommand - Cuando arrancamos el servicio. START_STICKY - Servicio que se inicia y se cierra manualmente. START_NOT_STICKY - Una vez terminado su proceso de autodestruye onDestroy - Cuando naliza.

martes 29 de mayo de 12

PasosCrear una clase que herede de service Debemos declarar esta clase en el AndroidManifest Si queremos que se ejecute en un proceso aparte debemos poner el atributo android:process=:miproceso Ejecutar la aplicacin con startService.

martes 29 de mayo de 12

Servicios del SistemaLocation Manager - Servicio del sistema que verica nuestra ubicacin en este planeta. Geocoder - Clase que obtiene los datos de ubicacin, como la direccin. con onLocationChanged podemos saber si la ubicacin ha cambiado o no. Conviene forzar un onLocationChanged en el onCreate. Con getLastKnownLocation(LocationManager.GPS_PROVIDER) sabemos la ltima ubicacin.

martes 29 de mayo de 12

Pasos

Obtenemos un vnculo al servicio con getSystemService(LOCATION_SERVICE) llamar al onLocationChanged Solicitamos que nos informe respecto a los cambios de ubicacin con: requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this)

martes 29 de mayo de 12

onLocationChanged

con el Geocoder obtenenos las direccin con getFromLocation(location.getLatitude(), location.getLongitude(), 10) El resultado obtenido es del tipo List con getAddressLine(num linea) obtenemos la direccion.

martes 29 de mayo de 12

EnlazandoEs posible conectar componentes con los servicios, enviar peticiones y recibir respuestas. Para permitir enlazar una aplicacin con un servicio es necesario implementar el mtodo onBind y devolver un objeto que implemente el interface IBinder Para que el cliente se enlace con el servicio debe llamar al mtodo bindService.

martes 29 de mayo de 12

bindServiceEl cliente debe implementar un objeto ServiceConnection para poder monitorizar la conexion Cuando consiga conectarse con el servicio se ejecutar automticamente el mtodo onServiceConnected() Multiples clientes pueden conectarse al mismo servicio. Si el servicio no fue arrancado con startService cuando el ltimo cliente se desconecte automticamente se destruir el servicio.

martes 29 de mayo de 12

IBINDERExisten 3 formas de trabajar con objetos IBinder. Heredando desde una clase Binder - forma privada de tener un enlace. utilizando un Messenger - Caso usado para comunicar el servicio a travs de la red. Usando AIDL - Forma de que varias aplicaciones se conecten al mismo servicio local.

martes 29 de mayo de 12

BINDER - PasosHeredar de la clase Binder e implementar los mtodos pblicos necesarios. Debera tener un mtodo que devuelva el servicio al que est vinculado. En el servicio debemos crear el mtodo onBind que debe devolver este objeto. Es de buena prctica utilizar el objeto Binder como atributo del servicio.

martes 29 de mayo de 12

Ejemplo Serviciopublic class MiServicio extends Service { private nal IBinder miBinder = new MiBinder(); public class MiBinder extends Binder { MiServicio getServicio() { return MiServicio; } } @Override public IBinder onBind(Intent intent) { return mBinder; } // metodos pblicos public Algo getDameAlgo() { return new Algo();} }martes 29 de mayo de 12

Conexin (dentro cliente) private ServiceConnection miConexion = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { MiBinder binder = (MiBinder) service; miServicio = binder.getServicio(); }

public void onServiceDisconnected(ComponentName arg0) { miServicio = null;} };martes 29 de mayo de 12

Vinculando

El ltimo paso es vincular la activity actual con el servicio con bindService(intent, conexion, Context.BIND_AUTO_CREATE); Conviene crear un cdigo para desvincularse del servicio con unbindService(conexion).

martes 29 de mayo de 12