Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porBenito Silva Hernández Modificado hace 8 años
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
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
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/
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.