La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Python – Android Manuel Aznar Septiembre de 2011.

Presentaciones similares


Presentación del tema: "Python – Android Manuel Aznar Septiembre de 2011."— Transcripción de la presentación:

1 Python – Android Manuel Aznar manuel.aznar@neodoo.es Septiembre de 2011

2 Indice ● Introducción a Android ● SL4A ● Ejemplos básicos ● Ejemplos avanzados ● Ejercicio ● Generación de un APK instalable en el móvil

3 Android ● Es un sistema operativo basado en GNU/Linux ● Para dispositivos móviles (teléfonos inteligentes ● y tabletas) ● Desarrollado inicialmente por Android Inc. ● Comprada por Google en 2005 ● Lo componen el sistema operativo, librerías, ● middleware y aplicaciones

4 Características ● Máquina Virtual optimizada para dispositivos móviles Dalvik ● Navegador integrado basado en webkit ● Base de datos SQLite ● Gráficos 3D basado en OpenGL ● Soporte para audio, video e imágenes ● Bluetooth, EDGE, 3G y wifi ● Camara, GPS y acelerometro

5 Versiones de Android

6 Crecimiento de Android

7 Arquitectura de Android

8 Market Android I

9 Market Android II

10 Market Android III

11 Market Android IV

12 Market Android V

13 Market Android VI ● Un único pago de 25$ ● Si la aplicación es de pago el reparto de los beneficios es de 30% Google, 70% Desarrollador ● Hay otros markets como el de Amazon, Motorola, Vodafone,... con distintas condiciones

14 Componentes de una aplicación ● Activities: Bloques básicos que constituyen una aplicación ● Services: Procesos que corren en segundo plano, no UI ● Broadcast y Intent Receivers: Reciben y reaccionan a anuncios, no UI ● Content Providers: Proveen acceso a datos a otras aplicaciones

15 SL4A: Scripting Layer for Android SL4A hace posibles crear rapidamente prototipos de aplicaciones para Android en el mismo dispositivo usando lenguajes de scripting de alto nivel. Esos scripts tienen acceso a muchas de las APIs disponibles por la aplicaciones desarrolladas en Java con un interface simplificado.

16 SL4A: ¿Por qué? ● ¿Es suficientemente fácil escribir programas para Android? Sí. ¿Entonces? ● El entorno de desarrollo de Android te hace la vida más fácil. Pero te obliga a tener un ordenador para trabajar. ● SL4A es una nueva idea para poder trabajar en una situación en la que necesites algo rápidamente. Después de que se haya aprendido se puede pasar a hacer una aplicación real.

17 SL4A: ¿Cómo? ● SL4A provee de una fachada que hace llamadas al API via JSON RPC. ● ¿SL4A compila los programas a Dex bytecode o hay una capa adicional de interpretación? ● Depende del lenguaje. Python es una versión de C que arranca nativamente.

18 SL4A: ¿Rendimiento? ● Se centra sobre todo en el desarrollo rápido y sencillo mas que en el rendimiento. ● Si importa mucho el rendimiento es mejor usar el SDK o el NDK, donde se tiene más control sobre el sistema.

19 SL4A: Características ● Manejar intents ● Iniciar activities ● Realizar llamadas ● Enviar SMS ● Enviar correos ● Escanear códigos de Barras ● Obtener localización y valores de sensores ● Usar comunicaciones como wifi o bluetooth ● Usar Text To spech (TTS) ● Obtener información de la bateria ● Grabar videos y audios

20 SL4A: API ● La API provista por SL4A es la misma para los lenguajes soportados. ● Las llamadas del API devuelve un objeto con 3 campos: ● id:Valor numérico asociado con la llamada. ● result: valor que devuelve el API o null si no devuelve. ● error: Descripción del error, null si no hubo. ● URL: ● http://code.google.com/p/android-scripting/wiki/ApiReference

21 SL4A: ¿API completa? ● BeanShell, JRuby, y Rhino tienen básicamente un API completa ya que invocan a Java directamente. ● Los lenguajes interpretados como Python son más restrictivos. Ellos solo tienen acceso al API expuesto a través de la capa RPC. ● Mirar la referencia al API para saber la lista de las cosas que estan soportadas. ● La capa RPC se puede extender fácilmente. ● http://code.google.com/p/android-scripting/wiki/ApiReference

22 SL4A: Lenguajes soportados ● Shell ● PHP ● JRuby ● Perl ● Python ● Lua ● BeanShell ● Rhino

23 ● Instalación en el Celular ● Instalación en el emulador de Android en Linux: Para este caso se debe tener instalado el SDK de android Instalación de SL4A

24 Instalación del interprete de Python Al darle clip al icono de SL4A aparece la una información donde nos pide que se agreguen scripts o interpretes presionando el botón menú como lo muestra la siguiente figura.

25 Instalación del interprete de Python Al darle menú aparecen varias opciones como lo son: Agregar, Ver, Preferencias, Ayuda, Actualizar.

26 Instalación del interprete de Python Al darle View o Ver aparecerá un menú donde se tiene varias opciones para visualizar, en este caso se quiere visualizar interpretes

27 Instalación del interprete de Python Al darle clip a agregar aparecerá una lista de interpretes que en este caso se instalará python

28 Instalación del interprete de Python Al seleccionar Python 2.6.2 se inicia el proceso de instalación del interprete y de algunos script

29 Instalación del interprete de Python Ahora aparece Python aparte de Shell en la lista de interpretadores

30 Instalación del interprete de Python Para probar que todo está funcionando se selecciona el interpretador y este se ejecutará

31 Instalación del interprete de Python Se lista los scripts en python de ejemplo para trabajar con Android

32 Herramientas para el desarrollo ● Instalar JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html ● Instalar Android SDK http://developer.android.com/sdk/index.html ● Instalar ANT http://ant.apache.org ● Instalar Eclipse http://www.eclipse.org ● Instalar plugin Eclipse-Android http://developer.android.com/sdk/eclipse-adt.html

33 Ejemplos: Hola Mundo import android droid = android.Android() droid.makeToast('Hello, Android!') print 'Hello world!'

34 Ejemplos: Entrada de datos import android droid = android.Android() texto = droid.dialogGetInput("Escriba su nombre","Nombre:") droid.makeToast('Hola %s' %texto[1])

35 Ejemplos: Entrada de datos

36

37 Ejemplos: Notificación import android droid = android.Android() droid.notify('Prueba', 'Hola Mundo 3!')

38 Ejemplos: Notificación

39 Ejemplos: Botones #!/usr/bin/env python import android droid = android.Android() title = 'Alerta' message = ('Esta alerta tiene 3 botones y' 'se espera que presione uno') droid.dialogCreateAlert(title, message) droid.dialogSetPositiveButtonText('Si') droid.dialogSetNegativeButtonText('No') droid.dialogSetNeutralButtonText('Cancelar') droid.dialogShow() response = droid.dialogGetResponse() droid.makeToast('El resultado de la ejecucion del boton es: %s' %response[1]['which'])

40 Ejemplos: Botones

41

42

43

44 Ejemplos: Menús import android droid=android.Android() droid.addOptionsMenuItem("Si","si",None,"star_on") droid.addOptionsMenuItem("No","no","No","star_off") droid.addOptionsMenuItem("Salir","off",None,"ic_menu_revert") print "Presiona el menu para ver opciones extra.." print "En 10 segundos se saldra si no hace nada" while True: # Wait for events from the menu. response=droid.eventWait(10000).result if response==None: break print response if response["name"]=="off": break print "Hecho."

45 Ejemplos: Enviar email import android droid = android.Android() asunto = "Prueba de envio de correo desde Android con un script de python" para = "xxxx@neodoo.es" cuerpo_correo = "Esta es una prueba de envio de correo\n El tiempo en el reloj es: %s\n - -----\n Curso de Python\n" %time.ctime() #Se llama a la funcion sendEmail con los datos necesarios. #Esto llama a la aplicacion de envio de correo de forma grafica con la #informacion que se pasa en la funcion. droid.sendEmail(para,asunto,cuerpo_correo) #Se finaliza la instancia de la clase. droid.exit()

46 Ejemplos: Enviar SMS #Importando el módulo android y el módulo time import android,time #Creando la instancia droid del objeto Android droid = android.Android() #Asignando el número de teléfono y mensaje telefono ="034777777777" mensaje = "Esta es una prueba de envio de sms a la hora %s" %time.ctime() #Enviar mensaje a la pantalla de android con la info del número y mensaje droid.makeToast("enviando mensaje a %s, con el siguiente contenido: %s" %(telefono,mensaje)) #Enviando el mensaje de texto droid.smsSend(telefono,mensaje)

47 Ejemplos: Llamar #Importando el módulo android y el módulo time import android #Creando la instancia droid del objeto Android droid = android.Android() #Asignando el número de teléfono telefono ="034777777777" #Llamando al numero de telefono dado droid.phoneCallNumber(telefono)

48 Ejemplos: Propone llamar #Importando el módulo android y el módulo time import android #Creando la instancia droid del objeto Android droid = android.Android() #Asignando el número de teléfono y mensaje telefono ="034777777777" #Propone llamar al numero de telefono dado droid.phoneDialNumber(telefono)

49 Ejemplos: Geolocalización import android from time import sleep #Se crea la instancia de la clase Android droid = android.Android() #Se inicia la localizacion droid.startLocating() #Se espera 15 segunfos sleep(15) #Se presenta en la consola la información de la localización #Se maneja la información de un diccionario. print "Altitud: ",droid.readLocation().result["network"]["altitude"] print "Proveedor: ",droid.readLocation().result["network"]["provider"] print "Latitud: ",droid.readLocation().result["network"]["latitude"] print "Longitud: ",droid.readLocation().result["network"]["longitude"] print "Tiempo: ",droid.readLocation().result["network"]["time"] print "Velocidad: ",droid.readLocation().result["network"]["speed"] print "Precisión: ",droid.readLocation().result["network"]["accuracy"] #Se detiene la localización droid.stopLocating()

50 Ejemplos: Chat por bluetooth I import android import time droid = android.Android() droid.toggleBluetoothState(True) droid.dialogCreateAlert('¿Eres el servidoe?') droid.dialogSetPositiveButtonText('Si') droid.dialogSetNegativeButtonText('No') droid.dialogShow() result = droid.dialogGetResponse() is_server = result.result['which'] == 'positive' if is_server: droid.bluetoothMakeDiscoverable() droid.bluetoothAccept() else: droid.bluetoothConnect()

51 Ejemplos: Chat por bluetooth II if is_server: result = droid.getInput('Chat', 'Pon tu mensaje').result if result is None: droid.exit() droid.bluetoothWrite(result + '\n') while True: message = droid.bluetoothReadLine().result droid.dialogCreateAlert('Chat recibido', message) droid.dialogSetPositiveButtonText('Ok') droid.dialogShow() droid.dialogGetResponse() result = droid.getInput('Chat', 'Pon tu mensaje').result if result is None: break droid.bluetoothWrite(result + '\n') droid.exit()

52 Ejemplos: Hacer una foto import android droid = android.Android() droid.cameraCapturePicture('/sdcard/foo.jpg')

53 Ejemplos: Text-To-Speech import android droid = android.Android() message = droid.dialogGetInput('TTS', '¿Que quieres decir?').result droid.ttsSpeak(message)

54 Ejemplos: Mensajería I import android import xmpp _SERVER = 'talk.google.com', 5223 def log(droid, message): print message self.droid.ttsSpeak(message) class SayChat(object): def __init__(self): self.droid = android.Android() username = self.droid.dialogGetInput('Usuario').result password = self.droid.dialogGetInput('Password').result jid = xmpp.protocol.JID(username) self.client = xmpp.Client(jid.getDomain(), debug=[]) self.client.connect(server=_SERVER) self.client.RegisterHandler('message', self.message_cb)

55 Ejemplos: Mensajería II if not self.client: log('Ha fallado la conexion!') return auth = self.client.auth(jid.getNode(), password, 'botty') if not auth: log('Ha fallado la autentificacion!') return self.client.sendInitPresence() def message_cb(self, session, message): jid = xmpp.protocol.JID(message.getFrom()) username = jid.getNode() text = message.getBody() self.droid.ttsSpeak('%s dice %s' % (username, text)) def run(self): try: while True: self.client.Process(1) except KeyboardInterrupt: pass saychat = SayChat() saychat.run()

56 Ejemplos: Batería I #!/usr/bin/env python2.6 # -*- coding: utf-8 -*- import android droid = android.Android() #Se monitoriza la bateria droid.batteryStartMonitoring() #Se captura la información de la bateria bateriaHealth = droid.batteryGetHealth()[1] if bateriaHealth == 2: print "La bateria está bien" elif bateriaHealth == 1: print "Salud de la Bateria desconocido" elif bateriaHealth == 3: print "La bateria tiene sobrecarga" elif bateriaHealth == 4: print "La bateria está muerta" elif bateriaHealth == 5: print "La bateria tiene sobrevoltaje" else: print "falla desconocida"

57 Ejemplos: Batería II #Se captura el tipo de conexión que usa el dispositivo tipoConexion = droid.batteryGetPlugType()[1] if tipoConexion == 0: print "Cable desconectado" elif tipoConexion == 1: print "Fuente de alimentación: cargador AC" elif tipoConexion == 2: print "Fuente de alimentación: cable USB" else: print "Desconocido" #Se captura lel estatus de la bateria estatus = droid.batteryGetStatus()[1] if estatus == 2: print "Bateria cargandose" elif estatus == 3: print "Bateria descargandose" elif estatus == 4: print "Bateria no se está cargando" elif estatus == 5: print "Bateria full de carga"

58 Ejemplos: Batería III print "Tipo de tecnología: ",droid.batteryGetTechnology()[1] print "Temperatura: ",droid.batteryGetTemperature()[1] print "voltaje: ",droid.batteryGetVoltage()[1] #Se deja de monitorizar la bateria droid.batteryStopMonitoring()

59 Más ejemplos Más ejemplos en la página oficial ● http://code.google.com/p/android-scripting/wiki/Tutorialshttp://code.google.com/p/android-scripting/wiki/Tutorials

60 Ejercicio: Mandar la posición y hora por Email ● Que escuche los SMS ● Si le llega un SMS con la palabra “GPS” ● Hacer que capture la posición GPS del móvil ● Que la envíe por email aun contacto ● Que la meta como evento en el Google Calendar

61 Ejercicio: Paso 1 ● Crear un “servicio” que se quede siempre en ejecución.

62 Ejercicio: Paso 2 ● Hacer que el servicio escuche los mensajes SMS entrantes y saque un Toast con el número y texto del mensaje. ● Habrá que buscar como poder emular el envío de SMS al emulador.

63 Ejercicio: Paso 3 ● Hacer que solo coja los que tengan el texto “GPS” y que además los marque como leídos.

64 Ejercicio: Paso 4 ● Hacer que envie un email “vacio” indicando en el titulo del email que ha recibido un mensaje “GPS” y desde que número lo ha recibido. ● Posible mejora: Si lo ha recibido de un contacto de la agenda sacar también su nombre.

65 Ejercicio: Paso 5 ● Hacer que geolocalice la posición del móvil. Tanto si esta el GPS conectado como si no. ● Crear una url del Google Maps con la latitud y longitud. ● Enviar esa url en el cuerpo del email. ● Si no se envía al emulador la simulación de un cambio de posición GPS se queda esperando bloqueado

66 Ejercicio: Paso 6 ● Añadir que ademas de enviar el email también cree en el Google Calendar un evento para ese momento indicando esa posición.

67 Crear APK Para hacerlo con Ant: ● Descomprimir el script_for_android_template.zip ● Poner la variable de entorno "ANDROID_SDK" ● Poner el paquete del proyecto : sh configure_package.sh ● Cambiar el nombre del proyecto en el "build.xml" ● Ejecutar "ant release" para crear el APK

68 Referencias: ● Wikipedia ● http://es.wikipedia.org/wiki/Androidhttp://es.wikipedia.org/wiki/Android ● Sitio oficial de Android ● http://developer.android.com/guide/basics/what-is-android.html ● Sitio Oficial de SL4A ● http://code.google.com/p/android-scripting/http://code.google.com/p/android-scripting/


Descargar ppt "Python – Android Manuel Aznar Septiembre de 2011."

Presentaciones similares


Anuncios Google