Python en Android,Charla del FUDcon Latam 2012
-
Upload
ernesto-crespo -
Category
Technology
-
view
3.487 -
download
1
description
Transcript of Python en Android,Charla del FUDcon Latam 2012
Python en AndroidPython en Android
Python en AndroidPython en Android
Ernesto CrespoErnesto Crespo
Email: [email protected]: [email protected]
Blog:ernesto-ecrespo.blogspot.comBlog:ernesto-ecrespo.blogspot.comtwitter: @ernestocrespotwitter: @ernestocrespo
LicenciaLicencia
●Este documento está licenciado bajo la GNU Free Este documento está licenciado bajo la GNU Free
Documentation License (GFDL). www.gnu.orgDocumentation License (GFDL). www.gnu.org
●Se autoriza la copia y distribución por cualquier medio, Se autoriza la copia y distribución por cualquier medio,
siempre que se realice bajo esta misma licencia, se siempre que se realice bajo esta misma licencia, se
mencione al autor original y se incluya esta nota.mencione al autor original y se incluya esta nota.
●Es un sistema operativo basado en GNU/LinuxEs un sistema operativo basado en GNU/Linux
●Para dispositivos móviles (teléfonos inteligentesPara dispositivos móviles (teléfonos inteligentes
y tabletas)y tabletas)
●Desarrollado inicialmente por Android Inc. Desarrollado inicialmente por Android Inc.
Comprada por Google en 2005Comprada por Google en 2005
●Lo componen el sistema operativo, librerías, Lo componen el sistema operativo, librerías,
middleware y aplicacionesmiddleware y aplicaciones
●Es un sistema operativo basado en GNU/LinuxEs un sistema operativo basado en GNU/Linux
●Para dispositivos móviles (teléfonos inteligentesPara dispositivos móviles (teléfonos inteligentes
y tabletas)y tabletas)
●Desarrollado inicialmente por Android Inc. Desarrollado inicialmente por Android Inc.
Comprada por Google en 2005Comprada por Google en 2005
●Lo componen el sistema operativo, librerías, Lo componen el sistema operativo, librerías,
middleware y aplicacionesmiddleware y aplicaciones
AndroidAndroid
CaracterísticasCaracterísticas
●Máquina Virtual optimizada para dispositivos móviles DalvikMáquina Virtual optimizada para dispositivos móviles Dalvik
●Navegador integrado basado en webkitNavegador integrado basado en webkit
●Base de datos SQLiteBase de datos SQLite
●Gráficos 3D basado en OpenGLGráficos 3D basado en OpenGL
●Soporte para audio, video e imágenesSoporte para audio, video e imágenes
●Bluetooth, EDGE, 3G y wifiBluetooth, EDGE, 3G y wifi
●Camara, GPS y acelerometroCamara, GPS y acelerometro
Componentes de una aplicaciónComponentes de una aplicación
●Activities: Bloques básicos que constituyen una aplicaciónActivities: Bloques básicos que constituyen una aplicación
●Services: Procesos que corren en segundo plano, no UIServices: Procesos que corren en segundo plano, no UI
●Broadcast and Intent Receivers: Reciben y reaccionan a Broadcast and Intent Receivers: Reciben y reaccionan a
anuncios, no UIanuncios, no UI
●Content Providers: Proveen acceso a datos a otras Content Providers: Proveen acceso a datos a otras
aplicacionesaplicaciones
Arquitectura de AndroidArquitectura de Android
Características de SL4ACaracterísticas de SL4A
●Manejar intentsManejar intents
●Iniciar activitiesIniciar activities
●Realizar llamadasRealizar llamadas
●Enviar SMSEnviar SMS
●Enviar correosEnviar correos
●Escanear códigos de BarrasEscanear códigos de Barras
●Obtener localización y valores de sensoresObtener localización y valores de sensores
●Usar comunicaciones como wifi o bluetoothUsar comunicaciones como wifi o bluetooth
●Usar Text To spech (TTS)Usar Text To spech (TTS)
●Obtener información de la bateriaObtener información de la bateria
●Grabar videos y audiosGrabar videos y audios
Lenguajes interpretados soportadosLenguajes interpretados soportados
●ShellShell
●PHPPHP
●JRubyJRuby
●PerlPerl
●PythonPython
●LuaLua
●BeanShellBeanShell
●RhinoRhino
¿Cómo funciona?¿Cómo funciona?
●Cpython corre de forma nativaCpython corre de forma nativa
●Una API facade expone un subconjunto de la API de android Una API facade expone un subconjunto de la API de android
, accesible vía llamadas Json RPC, accesible vía llamadas Json RPC
●Este subconjunto es el que está disponible para el Este subconjunto es el que está disponible para el
interpreteinterprete
●La API RPC está compilada en dex bytecode, no hay La API RPC está compilada en dex bytecode, no hay
interpretación adicional en javainterpretación adicional en java
APIAPI
●ActivityResultFacadeActivityResultFacade
●AlarmManagerFacadeAlarmManagerFacade
●AndroidFacadeAndroidFacade
●ApplicationManagerFacadeApplicationManagerFacade
●BatteryManagerFacadeBatteryManagerFacade
●BluetoothFacadeBluetoothFacade
●CameraFacadeCameraFacade
●PulseGeneratorFacadePulseGeneratorFacade
●SmsFacadeSmsFacade
●WifiFacadeWifiFacade
●etcetc
APIAPI
●La API provista por SL4A es la misma para los lenguajes La API provista por SL4A es la misma para los lenguajes
soportados.soportados.
●Las llamadas del API devuelve un objeto con 3 campos:Las llamadas del API devuelve un objeto con 3 campos:
● id:Valor numérico asociado con la llamada.id:Valor numérico asociado con la llamada.
● result: valor que devuelve el API o null si no devuelve.result: valor que devuelve el API o null si no devuelve.
● error: Descripción del error, null si no hubo.error: Descripción del error, null si no hubo.
Java vs Python en AndroidJava vs Python en Android
Código de Java: Java vs Python en Código de Java: Java vs Python en AndroidAndroid
Código de python: Java vs Python Código de python: Java vs Python en Androiden Android
Programa en Java: 35 Líneas de códigoPrograma en Python: 4 Líneas de código
Instalación de SL4AInstalación de SL4A
●Instalación en el CelularInstalación en el Celular
●Instalación en el emulador de Android en Linux: Para este Instalación en el emulador de Android en Linux: Para este
caso se debe tener instalado el SDK de androidcaso se debe tener instalado el SDK de android
Instalación del interprete de PythonInstalación del interprete de Python
Al darle clip al icono de SL4A aparece la una información Al darle clip al icono de SL4A aparece la una información
donde nos pide que se agreguen scripts o interpretes donde nos pide que se agreguen scripts o interpretes
presionando el botón menú como lo muestra la siguiente presionando el botón menú como lo muestra la siguiente
figura.figura.
Instalación del interprete de PythonInstalación del interprete de Python
Al darle menú aparecen varias opciones como lo son: Al darle menú aparecen varias opciones como lo son:
Agregar, Ver, Preferencias, Ayuda, Actualizar.Agregar, Ver, Preferencias, Ayuda, Actualizar.
Instalación del interprete de PythonInstalación del interprete de Python
Al darle View o Ver aparecerá un menú donde se tiene Al darle View o Ver aparecerá un menú donde se tiene
varias opciones para visualizar, en este caso se quiere varias opciones para visualizar, en este caso se quiere
visualizar interpretesvisualizar interpretes
Instalación del interprete de PythonInstalación del interprete de Python
Al darle clip a agregar aparecerá una lista de interpretes Al darle clip a agregar aparecerá una lista de interpretes
que en este caso se instalará pythonque en este caso se instalará python
Instalación del interprete de PythonInstalación del interprete de Python
Al seleccionar Python 2.6.2 se inicia el proceso de Al seleccionar Python 2.6.2 se inicia el proceso de
instalación del interprete y de algunos scriptinstalación del interprete y de algunos script
Instalación del interprete de PythonInstalación del interprete de Python
Ahora aparece Python aparte de Shell en la lista de Ahora aparece Python aparte de Shell en la lista de
interpretadoresinterpretadores
Instalación del interprete de PythonInstalación del interprete de Python
Para probar que todo está funcionando se selecciona el Para probar que todo está funcionando se selecciona el
interpretador y este se ejecutaráinterpretador y este se ejecutará
Instalación del interprete de PythonInstalación del interprete de Python
Se lista los scripts en python de ejemplo para trabajar con Se lista los scripts en python de ejemplo para trabajar con
AndroidAndroid
Ejemplos: Entrada de datosEjemplos: Entrada de datos
#!/usr/bin/env python#!/usr/bin/env pythonimport android,timeimport android,timedroid = android.Android()droid = android.Android()texto = droid.dialogGetInput("Escriba su nombre","Nombre:")texto = droid.dialogGetInput("Escriba su nombre","Nombre:")droid.makeToast('Hola %s' %texto[1])droid.makeToast('Hola %s' %texto[1])time.sleep(5)time.sleep(5)
Ejemplos: Entrada de datosEjemplos: Entrada de datos
Ejemplos: Entrada de datosEjemplos: Entrada de datos
Ejemplos: Barra de progresoEjemplos: Barra de progreso
#!/usr/bin/env python#!/usr/bin/env python import android,timeimport android,timedroid = android.Android()droid = android.Android()titulo = "Horizontal"titulo = "Horizontal"mensaje = "Este es una barra de progreso horizontal" mensaje = "Este es una barra de progreso horizontal" numero = droid.dialogGetInput("Escriba el tiempo","tiempo:") numero = droid.dialogGetInput("Escriba el tiempo","tiempo:")
droid.dialogCreateHorizontalProgress(titulo,mensaje,int(numero[1])) droid.dialogCreateHorizontalProgress(titulo,mensaje,int(numero[1])) droid.dialogShow()droid.dialogShow()for i in range(0,int(numero[1])):for i in range(0,int(numero[1])): time.sleep(0.1)time.sleep(0.1) droid.dialogSetCurrentProgress(i) droid.dialogSetCurrentProgress(i) droid.dialogDismiss()droid.dialogDismiss()
Ejemplos: Barra de progresoEjemplos: Barra de progreso
Ejemplos: Barra de progresoEjemplos: Barra de progreso
Ejemplos: Barra de spinnerEjemplos: Barra de spinner#!/usr/bin/env python#!/usr/bin/env pythonimport android, timeimport android, timedroid = android.Android()droid = android.Android()title = 'Spinner'title = 'Spinner'message = 'Este es un simple progreso spinner.'message = 'Este es un simple progreso spinner.'numero = droid.dialogGetInput("Escriba el tiempo","tiempo:")numero = droid.dialogGetInput("Escriba el tiempo","tiempo:")droid.dialogCreateSpinnerProgress(title, message)droid.dialogCreateSpinnerProgress(title, message)droid.dialogShow()droid.dialogShow()time.sleep(int(numero[1]))time.sleep(int(numero[1]))droid.dialogDismiss()droid.dialogDismiss()
Ejemplos: Barra de spinnerEjemplos: Barra de spinner
Ejemplos: Barra de spinnerEjemplos: Barra de spinner
Ejemplos: NotificaciónEjemplos: Notificación#importar módulos android y time#importar módulos android y timeimport android,timeimport android,time #Crear la instancia de la clase Android#Crear la instancia de la clase Androiddroid = android.Android()droid = android.Android() #Se crea el mensaje de notificación.#Se crea el mensaje de notificación.droid.notify('Prueba' , 'Hola Mundo!')droid.notify('Prueba' , 'Hola Mundo!')
Ejemplos: NotificaciónEjemplos: Notificación
Ejemplos: BotónEjemplos: Botón#!/usr/bin/env python#!/usr/bin/env pythonimport android,timeimport android,timedroid = android.Android()droid = android.Android()title = 'Interfaz de usuario'title = 'Interfaz de usuario'message = 'Esta es una prueba'message = 'Esta es una prueba'droid.dialogCreateAlert(title, message)droid.dialogCreateAlert(title, message)droid.dialogSetPositiveButtonText('Continuar')droid.dialogSetPositiveButtonText('Continuar')droid.dialogShow()droid.dialogShow()response = droid.dialogGetResponse()response = droid.dialogGetResponse()droid.makeToast('El resultado de la ejecucion del boton es: %s' droid.makeToast('El resultado de la ejecucion del boton es: %s' %response[1]['which'])%response[1]['which'])time.sleep(5)time.sleep(5)
Ejemplos: BotónEjemplos: Botón
Ejemplos: BotónEjemplos: Botón
Ejemplos: BotonesEjemplos: Botones#!/usr/bin/env python#!/usr/bin/env pythonimport androidimport androiddroid = android.Android()droid = android.Android()title = 'Alerta'title = 'Alerta'message = ('Esta alerta tiene 3 botones y' 'se espera que presione message = ('Esta alerta tiene 3 botones y' 'se espera que presione uno')uno')droid.dialogCreateAlert(title, message)droid.dialogCreateAlert(title, message)droid.dialogSetPositiveButtonText('Si')droid.dialogSetPositiveButtonText('Si')droid.dialogSetNegativeButtonText('No')droid.dialogSetNegativeButtonText('No')droid.dialogSetNeutralButtonText('Cancelar')droid.dialogSetNeutralButtonText('Cancelar')droid.dialogShow()droid.dialogShow()response = droid.dialogGetResponse()response = droid.dialogGetResponse()droid.makeToast('El resultado de la ejecucion del boton es: %s' droid.makeToast('El resultado de la ejecucion del boton es: %s' %response[1]['which'])%response[1]['which'])
Ejemplos: BotonesEjemplos: Botones
Ejemplos: BotonesEjemplos: Botones
Ejemplos: BotonesEjemplos: Botones
Ejemplos: BotonesEjemplos: Botones
Ejemplos: Selección simpleEjemplos: Selección simple#!/usr/bin/env python#!/usr/bin/env pythonimport android,timeimport android,timedroid = android.Android()droid = android.Android()titulo = 'Color seleccionado'titulo = 'Color seleccionado'droid.dialogCreateAlert(titulo)droid.dialogCreateAlert(titulo)colores = ('amarillo', 'azul', 'rojo')colores = ('amarillo', 'azul', 'rojo')droid.dialogSetItems(colores)droid.dialogSetItems(colores)droid.dialogShow()droid.dialogShow()respuesta = droid.dialogGetResponse().resultrespuesta = droid.dialogGetResponse().resultdroid.makeToast('El color seleccionado es: %s' droid.makeToast('El color seleccionado es: %s' %colores[respuesta['item']])%colores[respuesta['item']])time.sleep(5)time.sleep(5)
Ejemplos: Selección simpleEjemplos: Selección simple
Ejemplos: Selección SimpleEjemplos: Selección Simple
Ejemplos: Selección Simple 2Ejemplos: Selección Simple 2#!/usr/bin/env python#!/usr/bin/env python
import android, timeimport android, timedroid = android.Android()droid = android.Android()titulo = "Seleccione una ciudad"titulo = "Seleccione una ciudad"ciudades = ['Valencia','Barquisimeto','Merida','Caracas']ciudades = ['Valencia','Barquisimeto','Merida','Caracas']droid.dialogCreateAlert(titulo)droid.dialogCreateAlert(titulo)droid.dialogSetSingleChoiceItems(ciudades)droid.dialogSetSingleChoiceItems(ciudades)droid.dialogSetPositiveButtonText('Seleccione')droid.dialogSetPositiveButtonText('Seleccione')droid.dialogSetNegativeButtonText('Salir')droid.dialogSetNegativeButtonText('Salir')droid.dialogShow()droid.dialogShow()respuesta = droid.dialogGetResponse().resultrespuesta = droid.dialogGetResponse().resultitems = droid.dialogGetSelectedItems()items = droid.dialogGetSelectedItems()if respuesta['which'] == "positive":if respuesta['which'] == "positive": droid.makeToast("La ciudad seleccionada es: %s " droid.makeToast("La ciudad seleccionada es: %s " %ciudades[int(items[1][0])])%ciudades[int(items[1][0])]) time.sleep(2)time.sleep(2)else:else: droid.makeToast("Saliendo del programa")droid.makeToast("Saliendo del programa") time.sleep(2)time.sleep(2)
Ejemplos: Selección Simple 2Ejemplos: Selección Simple 2
Ejemplos: Selección MultipleEjemplos: Selección Multiple#!/usr/bin/env python#!/usr/bin/env pythonimport android, timeimport android, timedroid = android.Android()droid = android.Android()titulo = "Seleccione las ciudades de su preferencia"titulo = "Seleccione las ciudades de su preferencia"ciudades = ['Valencia','Barquisimeto','Merida','Caracas','Maracaibo','Maracay','Margarita']ciudades = ['Valencia','Barquisimeto','Merida','Caracas','Maracaibo','Maracay','Margarita']droid.dialogCreateAlert(titulo)droid.dialogCreateAlert(titulo)droid.dialogSetMultiChoiceItems(ciudades)droid.dialogSetMultiChoiceItems(ciudades)droid.dialogSetPositiveButtonText('Seleccionar')droid.dialogSetPositiveButtonText('Seleccionar')droid.dialogSetNegativeButtonText('Salir')droid.dialogSetNegativeButtonText('Salir')droid.dialogShow()droid.dialogShow()respuesta = droid.dialogGetResponse().resultrespuesta = droid.dialogGetResponse().resultitems = droid.dialogGetSelectedItems()items = droid.dialogGetSelectedItems()if respuesta['which'] == "positive":if respuesta['which'] == "positive": if len(items[1]) == 0:if len(items[1]) == 0: droid.dialogCreateAlert("No se selecciono ciudad alguna")droid.dialogCreateAlert("No se selecciono ciudad alguna") elif len(items[1]) > 0:elif len(items[1]) > 0: lista = []lista = [] texto = ""texto = "" cantidad = len(items[1])cantidad = len(items[1]) c = 1c = 1 for i in items[1]:for i in items[1]: lista.append(ciudades[int(i)])lista.append(ciudades[int(i)]) if c <> cantidad:if c <> cantidad: texto = texto + ciudades[int(i)] + ","texto = texto + ciudades[int(i)] + "," else:else: texto = texto + ciudades[int(i)]texto = texto + ciudades[int(i)] c = c+1c = c+1 droid.dialogCreateAlert("Ciudades seleccionada: %s" %texto)droid.dialogCreateAlert("Ciudades seleccionada: %s" %texto)else:else: droid.dialogCreateAlert("Saliendo de la aplicacion")droid.dialogCreateAlert("Saliendo de la aplicacion")droid.dialogSetPositiveButtonText('Aceptar')droid.dialogSetPositiveButtonText('Aceptar')droid.dialogShow()droid.dialogShow()
Ejemplos: Selección MultipleEjemplos: Selección Multiple
Ejemplos: Selección MultipleEjemplos: Selección Multiple
Ejemplos: WebviewEjemplos: Webview<html><html> <head><head> <title>Text to Speech</title><title>Text to Speech</title> <script><script> var droid = new Android();var droid = new Android(); var speak = function() {var speak = function() { droid.postEvent("say", document.getElementById("say").value); }droid.postEvent("say", document.getElementById("say").value); } </script></script> </head></head> <body><body> <form onsubmit="speak(); return false;"><form onsubmit="speak(); return false;"> <label for="say">que le gustaria decir?</label><label for="say">que le gustaria decir?</label> <input type="text" id="say" /><input type="text" id="say" /> <input type="submit" value="Speak" /><input type="submit" value="Speak" /> </form></form> </body></body></html></html>
Ejemplos: WebviewEjemplos: Webviewimport androidimport android
droid = android.Android()droid = android.Android()droid.webViewShow('file:///sdcard/sl4a/scripts/text_to_speech2.html')droid.webViewShow('file:///sdcard/sl4a/scripts/text_to_speech2.html')while True:while True: result = droid.waitForEvent('say').resultresult = droid.waitForEvent('say').result droid.ttsSpeak(result['data'])droid.ttsSpeak(result['data'])
Ejemplos: WebviewEjemplos: Webview
Ejemplos: WebviewEjemplos: Webview
Más ejemplosMás ejemplosEjecución remota de programas python en el celular:Ejecución remota de programas python en el celular:●Posición del celular en google mapPosición del celular en google maphttp://ernesto-ecrespo.blogspot.com/2011/01/aplicacion-que-muestra-las-coordenadas.htmlhttp://ernesto-ecrespo.blogspot.com/2011/01/aplicacion-que-muestra-las-coordenadas.html
●Captura de la información de la posición del celular desde LinuxCaptura de la información de la posición del celular desde Linuxhttp://ernesto-ecrespo.blogspot.com/2010/12/capturar-la-ubicacion-del-celular.htmlhttp://ernesto-ecrespo.blogspot.com/2010/12/capturar-la-ubicacion-del-celular.html
●Obtener información del estado de la bateriaObtener información del estado de la bateriahttp://ernesto-ecrespo.blogspot.com/2010/12/obtener-informacion-del-estado-de-la.htmlhttp://ernesto-ecrespo.blogspot.com/2010/12/obtener-informacion-del-estado-de-la.html
●Manejar los mensajes de texto desde LinuxManejar los mensajes de texto desde Linuxhttp://ernesto-ecrespo.blogspot.com/2010/12/manejar-los-mensajes-de-texto-del.htmlhttp://ernesto-ecrespo.blogspot.com/2010/12/manejar-los-mensajes-de-texto-del.html
●Enviar mensajes de texto desde android con pythonEnviar mensajes de texto desde android con pythonhttp://ernesto-ecrespo.blogspot.com/2010/06/enviar-mensajes-de-texto-desde-android.htmlhttp://ernesto-ecrespo.blogspot.com/2010/06/enviar-mensajes-de-texto-desde-android.html
●Enviar correo electrónico desde andoird con pythonEnviar correo electrónico desde andoird con pythonhttp://ernesto-ecrespo.blogspot.com/2010/06/enviar-correo-desde-android-con-python.htmlhttp://ernesto-ecrespo.blogspot.com/2010/06/enviar-correo-desde-android-con-python.html
●Más ejemplos en la página oficialMás ejemplos en la página oficial●http://code.google.com/p/android-scripting/wiki/Tutorialshttp://code.google.com/p/android-scripting/wiki/Tutorials
Usos de SL4AUsos de SL4ASmallSatSmallSat
Usos de SL4AUsos de SL4ACellbotsCellbots
Referencias:Referencias:●WikipediaWikipediahttp://es.wikipedia.org/wiki/Androidhttp://es.wikipedia.org/wiki/Android
●Sitio oficial de AndroidSitio oficial de Androidhttp://developer.android.com/guide/basics/what-is-android.htmlhttp://developer.android.com/guide/basics/what-is-android.html
●Sitio Oficial de SL4ASitio Oficial de SL4Ahttp://code.google.com/p/android-scripting/http://code.google.com/p/android-scripting/
●Presentación Programando en Android de Matias Bordese en PyArPresentación Programando en Android de Matias Bordese en PyArhttp://python.org.ar/pyar/Charlas#Programando_Python_en_Androidhttp://python.org.ar/pyar/Charlas#Programando_Python_en_Android
●Blog de Ernesto CrespoBlog de Ernesto Crespohttp://ernesto-ecrespo.blogspot.com/search/label/Androidhttp://ernesto-ecrespo.blogspot.com/search/label/Android
●Cellbots, Canal de youtube:Cellbots, Canal de youtube:http://www.youtube.com/cellbotshttp://www.youtube.com/cellbots
●SmallSatSmallSathttp://blog.makezine.com/2010/07/27/nexus-onearduino-smallsat-satellite/http://blog.makezine.com/2010/07/27/nexus-onearduino-smallsat-satellite/
●CellbotsCellbotswww.cellbots.comwww.cellbots.com
●Cellbot control:Cellbot control:https://github.com/georgegoh/cellbot-controllerhttps://github.com/georgegoh/cellbot-controller