Python en Android,Charla del FUDcon Latam 2012

3,613
-1

Published on

Charla para el FUDcon Latam 2012 sobre como programar en Android con el lenguaje de programación Python, varios ejemplos.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,613
On Slideshare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
61
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Python en Android,Charla del FUDcon Latam 2012

  1. 1. Python en Android
  2. 2. Python en Android Ernesto Crespo Email: ecrespo@gmail.com Blog:ernesto-ecrespo.blogspot.com twitter: @ernestocrespo
  3. 3. Licencia● Este documento está licenciado bajo la GNU FreeDocumentation License (GFDL). www.gnu.org● Se autoriza la copia y distribución por cualquier medio,siempre que se realice bajo esta misma licencia, semencione al autor original y se incluya esta nota.
  4. 4. Android●Es un sistema operativo basado en GNU/Linux ●Es un sistema operativo basado en GNU/Linux●Para dispositivos móviles (teléfonos inteligentes ●Para dispositivos móviles (teléfonos inteligentes y tabletas) y tabletas)●Desarrollado inicialmente por Android Inc. ●Desarrollado inicialmente por Android Inc. Comprada por Google en 2005 Comprada por Google en 2005●Lo componen el sistema operativo, librerías, ●Lo componen el sistema operativo, librerías, middleware y aplicaciones middleware y aplicaciones
  5. 5. 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
  6. 6. Componentes de una aplicación● Activities: Bloques básicos que constituyen una aplicación● Services: Procesos que corren en segundo plano, no UI● Broadcast and Intent Receivers: Reciben y reaccionan aanuncios, no UI● Content Providers: Proveen acceso a datos a otrasaplicaciones
  7. 7. Arquitectura de Android
  8. 8. Características de SL4A● 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
  9. 9. Lenguajes interpretados soportados● Shell● PHP● JRuby● Perl● Python● Lua● BeanShell● Rhino
  10. 10. ¿Cómo funciona?● Cpython corre de forma nativa● Una API facade expone un subconjunto de la API de android, accesible vía llamadas Json RPC● Este subconjunto es el que está disponible para elinterprete● La API RPC está compilada en dex bytecode, no hayinterpretación adicional en java
  11. 11. API● ActivityResultFacade● AlarmManagerFacade● AndroidFacade● ApplicationManagerFacade● BatteryManagerFacade● BluetoothFacade● CameraFacade● PulseGeneratorFacade● SmsFacade● WifiFacade● etc
  12. 12. API● La API provista por SL4A es la misma para los lenguajessoportados.● 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.
  13. 13. Java vs Python en Android
  14. 14. Código de Java: Java vs Python enAndroid
  15. 15. Código de python: Java vs Pythonen AndroidPrograma en Java: 35 Líneas de códigoPrograma en Python: 4 Líneas de código
  16. 16. Instalación de SL4A● Instalación en el Celular● Instalación en el emulador de Android en Linux: Para estecaso se debe tener instalado el SDK de android
  17. 17. Instalación del interprete de PythonAl darle clip al icono de SL4A aparece la una informacióndonde nos pide que se agreguen scripts o interpretespresionando el botón menú como lo muestra la siguientefigura.
  18. 18. Instalación del interprete de PythonAl darle menú aparecen varias opciones como lo son:Agregar, Ver, Preferencias, Ayuda, Actualizar.
  19. 19. Instalación del interprete de PythonAl darle View o Ver aparecerá un menú donde se tienevarias opciones para visualizar, en este caso se quierevisualizar interpretes
  20. 20. Instalación del interprete de PythonAl darle clip a agregar aparecerá una lista de interpretesque en este caso se instalará python
  21. 21. Instalación del interprete de PythonAl seleccionar Python 2.6.2 se inicia el proceso deinstalación del interprete y de algunos script
  22. 22. Instalación del interprete de PythonAhora aparece Python aparte de Shell en la lista deinterpretadores
  23. 23. Instalación del interprete de PythonPara probar que todo está funcionando se selecciona elinterpretador y este se ejecutará
  24. 24. Instalación del interprete de PythonSe lista los scripts en python de ejemplo para trabajar conAndroid
  25. 25. Ejemplos: Entrada de datos#!/usr/bin/env pythonimport android,timedroid = android.Android()texto = droid.dialogGetInput("Escriba su nombre","Nombre:")droid.makeToast(Hola %s %texto[1])time.sleep(5)
  26. 26. Ejemplos: Entrada de datos
  27. 27. Ejemplos: Entrada de datos
  28. 28. Ejemplos: Barra de progreso#!/usr/bin/env pythonimport android,timedroid = android.Android()titulo = "Horizontal"mensaje = "Este es una barra de progreso horizontal"numero = droid.dialogGetInput("Escriba el tiempo","tiempo:")droid.dialogCreateHorizontalProgress(titulo,mensaje,int(numero[1]))droid.dialogShow()for i in range(0,int(numero[1])): time.sleep(0.1) droid.dialogSetCurrentProgress(i)droid.dialogDismiss()
  29. 29. Ejemplos: Barra de progreso
  30. 30. Ejemplos: Barra de progreso
  31. 31. Ejemplos: Barra de spinner#!/usr/bin/env pythonimport android, timedroid = android.Android()title = Spinnermessage = Este es un simple progreso spinner.numero = droid.dialogGetInput("Escriba el tiempo","tiempo:")droid.dialogCreateSpinnerProgress(title, message)droid.dialogShow()time.sleep(int(numero[1]))droid.dialogDismiss()
  32. 32. Ejemplos: Barra de spinner
  33. 33. Ejemplos: Barra de spinner
  34. 34. Ejemplos: Notificación#importar módulos android y timeimport android,time#Crear la instancia de la clase Androiddroid = android.Android()#Se crea el mensaje de notificación.droid.notify(Prueba , Hola Mundo!)
  35. 35. Ejemplos: Notificación
  36. 36. Ejemplos: Botón#!/usr/bin/env pythonimport android,timedroid = android.Android()title = Interfaz de usuariomessage = Esta es una pruebadroid.dialogCreateAlert(title, message)droid.dialogSetPositiveButtonText(Continuar)droid.dialogShow()response = droid.dialogGetResponse()droid.makeToast(El resultado de la ejecucion del boton es: %s%response[1][which])time.sleep(5)
  37. 37. Ejemplos: Botón
  38. 38. Ejemplos: Botón
  39. 39. Ejemplos: Botones#!/usr/bin/env pythonimport androiddroid = android.Android()title = Alertamessage = (Esta alerta tiene 3 botones y se espera que presioneuno)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. 40. Ejemplos: Botones
  41. 41. Ejemplos: Botones
  42. 42. Ejemplos: Botones
  43. 43. Ejemplos: Botones
  44. 44. Ejemplos: Selección simple#!/usr/bin/env pythonimport android,timedroid = android.Android()titulo = Color seleccionadodroid.dialogCreateAlert(titulo)colores = (amarillo, azul, rojo)droid.dialogSetItems(colores)droid.dialogShow()respuesta = droid.dialogGetResponse().resultdroid.makeToast(El color seleccionado es: %s%colores[respuesta[item]])time.sleep(5)
  45. 45. Ejemplos: Selección simple
  46. 46. Ejemplos: Selección Simple
  47. 47. Ejemplos: Selección Simple 2#!/usr/bin/env pythonimport android, timedroid = android.Android()titulo = "Seleccione una ciudad"ciudades = [Valencia,Barquisimeto,Merida,Caracas]droid.dialogCreateAlert(titulo)droid.dialogSetSingleChoiceItems(ciudades)droid.dialogSetPositiveButtonText(Seleccione)droid.dialogSetNegativeButtonText(Salir)droid.dialogShow()respuesta = droid.dialogGetResponse().resultitems = droid.dialogGetSelectedItems()if respuesta[which] == "positive": droid.makeToast("La ciudad seleccionada es: %s "%ciudades[int(items[1][0])]) time.sleep(2)else: droid.makeToast("Saliendo del programa") time.sleep(2)
  48. 48. Ejemplos: Selección Simple 2
  49. 49. Ejemplos: Selección Multiple#!/usr/bin/env pythonimport android, timedroid = android.Android()titulo = "Seleccione las ciudades de su preferencia"ciudades = [Valencia,Barquisimeto,Merida,Caracas,Maracaibo,Maracay,Margarita]droid.dialogCreateAlert(titulo)droid.dialogSetMultiChoiceItems(ciudades)droid.dialogSetPositiveButtonText(Seleccionar)droid.dialogSetNegativeButtonText(Salir)droid.dialogShow()respuesta = droid.dialogGetResponse().resultitems = droid.dialogGetSelectedItems()if respuesta[which] == "positive": if len(items[1]) == 0: droid.dialogCreateAlert("No se selecciono ciudad alguna") elif len(items[1]) > 0: lista = [] texto = "" cantidad = len(items[1]) c=1 for i in items[1]: lista.append(ciudades[int(i)]) if c <> cantidad: texto = texto + ciudades[int(i)] + "," else: texto = texto + ciudades[int(i)] c = c+1 droid.dialogCreateAlert("Ciudades seleccionada: %s" %texto)else: droid.dialogCreateAlert("Saliendo de la aplicacion")droid.dialogSetPositiveButtonText(Aceptar)droid.dialogShow()
  50. 50. Ejemplos: Selección Multiple
  51. 51. Ejemplos: Selección Multiple
  52. 52. Ejemplos: Webview<html> <head> <title>Text to Speech</title> <script> var droid = new Android(); var speak = function() { droid.postEvent("say", document.getElementById("say").value); } </script> </head> <body> <form onsubmit="speak(); return false;"> <label for="say">que le gustaria decir?</label> <input type="text" id="say" /> <input type="submit" value="Speak" /> </form> </body></html>
  53. 53. Ejemplos: Webviewimport androiddroid = android.Android()droid.webViewShow(file:///sdcard/sl4a/scripts/text_to_speech2.html)while True: result = droid.waitForEvent(say).result droid.ttsSpeak(result[data])
  54. 54. Ejemplos: Webview
  55. 55. Ejemplos: Webview
  56. 56. Más ejemplosEjecución remota de programas python en el celular:●Posición del celular en google maphttp://ernesto-ecrespo.blogspot.com/2011/01/aplicacion-que-muestra-las-coordenadas.html● Captura de la información de la posición del celular desde Linuxhttp://ernesto-ecrespo.blogspot.com/2010/12/capturar-la-ubicacion-del-celular.html● Obtener información del estado de la bateriahttp://ernesto-ecrespo.blogspot.com/2010/12/obtener-informacion-del-estado-de-la.html● Manejar los mensajes de texto desde Linuxhttp://ernesto-ecrespo.blogspot.com/2010/12/manejar-los-mensajes-de-texto-del.html● Enviar mensajes de texto desde android con pythonhttp://ernesto-ecrespo.blogspot.com/2010/06/enviar-mensajes-de-texto-desde-android.html● Enviar correo electrónico desde andoird con pythonhttp://ernesto-ecrespo.blogspot.com/2010/06/enviar-correo-desde-android-con-python.html● Más ejemplos en la página oficialhttp://code.google.com/p/android-scripting/wiki/Tutorials●
  57. 57. Usos de SL4ASmallSat
  58. 58. Usos de SL4ACellbots
  59. 59. Referencias:Wikipedia● http://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/●Presentación Programando en Android de Matias Bordese en PyAr http://python.org.ar/pyar/Charlas#Programando_Python_en_Android●Blog de Ernesto Crespo http://ernesto-ecrespo.blogspot.com/search/label/Android●Cellbots, Canal de youtube: http://www.youtube.com/cellbots●SmallSat http://blog.makezine.com/2010/07/27/nexus-onearduino-smallsat-satellite/●Cellbots www.cellbots.com●Cellbot control: https://github.com/georgegoh/cellbot-controller

×