Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
aplicacion para abrir una url especifica
#1
Hola , seria posible desde python lanzar el navegador de un dispositivo android , estoy intentando crear un script en python que se ejecutara en una tablet android
Responder
#2
Hola. Sí, puedes usar el módulo estándar webbrowser: https://recursospython.com/guias-y-manua...ebbrowser/.

Saludos!
Responder
#3
Lo he probado y desde windows consigue abrir el navegador con una url determinada , pero en android no hace nada , alguna idea?
Responder
#4
¿Estás usando Kivy?
Responder
#5
Si , estoy usando kivy y webbrowser no hace nada desde android , como puedo saber que esta haciendo en android?

Al lanzarlo en kivy no da ningun error , pero tampoco hace nada

Este es mi codigo:

  1. from kivy.utils import platform
  2.  
  3. def launch_webbrowser(url):
  4. import webbrowser
  5. if platform == 'android':
  6. from jnius import autoclass, cast
  7. def open_url(url):
  8. PythonActivity = autoclass('org.kivy.android.PythonActivity')
  9. activity = PythonActivity.mActivity
  10. Intent = autoclass('android.content.Intent')
  11. Uri = autoclass('android.net.Uri')
  12. browserIntent = Intent()
  13. browserIntent.setAction(Intent.ACTION_VIEW)
  14. browserIntent.setData(Uri.parse(url))
  15. currentActivity = cast('android.app.Activity', activity)
  16. currentActivity.startActivity(browserIntent)
  17.  
  18. # Web browser support.
  19. class AndroidBrowser(object):
  20. def open(self, url, new=0, autoraise=True):
  21. open_url(url)
  22. def open_new(self, url):
  23. open_url(url)
  24. def open_new_tab(self, url):
  25. open_url(url)
  26.  
  27. webbrowser.register('android', AndroidBrowser, None, -1)
  28.  
  29. webbrowser.open(url)
  30.  
  31. launch_webbrowser('http://www.kivy.org')
Responder
#6
Solucionado , ya consigo que lance el navegador con una url , ahora el problema era esta linea que si la anulamos funciona

webbrowser.register('android', AndroidBrowser, None, -1)

Ahora , tengo otro problema y es el siguiente , la app python que queda a la escucha en la tablet para lanzar el navegador cuando recibe una peticion en kivy no me funciona y necesito hacerla funcionar , el codigo que tengo hasta el momento y que en el interprete de python en la tablet funciona es este

  1. import urllib2
  2. import socket
  3. import threading
  4. import webbrowser
  5.  
  6.        
  7. def administrar_clientes(socket_cliente):
  8.    peticion = socket_cliente.recv(1024)
  9.    print " %s a las %s" % (peticion,time.strftime("%c"))
  10.    if peticion=="1":
  11. [*]       //Aqui vendria el codigo anterior que hace la llamada a la url.
  12.  
  13.     
  14.    respuesta = "Hola , estas conectado"
  15.    socket_cliente.send(respuesta)
  16.    socket_cliente.close()
  17.    
  18.  
  19. puerto = 32435
  20.  
  21. ip="0.0.0.0"    
  22. max_conexiones = 50
  23. servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  24.  
  25. servidor.bind((ip, puerto))
  26. servidor.listen(max_conexiones)
  27.  
  28. mensaje = "
  29. [*]Servidor iniciado : %s" % time.strftime("%c")
  30.  
  31. print mensaje
  32. #graba_texto(mensaje,'c:\\Lector\\log.txt')
  33. print "[*]Esperando conexiones en %s:%d" % (ip, puerto)
  34.  
  35. while True:
  36.    cliente, direccion = servidor.accept()
  37.    print "[*]Conexion establecida con %s:%d" % (direccion[0], direccion[1])
  38.    administrador_de_clientes = threading.Thread(target=administrar_clientes, args=(cliente,))
  39.    administrador_de_clientes.start()







[*]
Es imprescindible que el servidor corra en kivy , ya que cuando en la pagina web se haga una peticion esta ha de ser redirigida a una tablet en concreto que tendra el server escuchando
Responder
#7
Si tienes un bucle infinito indefectiblemente se va a bloquear la interfaz de usuario. Te recomiendo que uses Twisted en lugar de lanzar hilos; según tengo entendido se comunica bastante bien con Kivy. Aquí hay un ejemplo: https://github.com/kivy/kivy/blob/master...ver_app.py.

Saludos
Responder
#8
La tablet lo unico que va a hacer es estar permanentemente escuchando por un determinado puerto y cuando recibe la peticion desde el server ha de abrir la url que le pasa el servidor , es lo unico que va a tener que hacer

He reconvertir el codigo de python a kivy (o eso creo ) y en windows funciona a la perfeccion , pero cuando lo ejecuto en la tablet me da un error 13
Responder
#9
Este es el codigo reconvertido a kivy
  1. import kivy
  2. from kivy.app import App
  3.    
  4. import socket
  5. import threading
  6. import time
  7.  
  8. import webbrowser
  9.  
  10. class Server(App):
  11.        
  12.     def administrar_clientes(socket_cliente):
  13.         peticion = socket_cliente.recv(1024)
  14.         if peticion!="":
  15.             webbrowser.open(peticion)
  16.         respuesta = "Hola , estas conectado"
  17.         socket_cliente.send(respuesta)
  18.         socket_cliente.close()
  19.     
  20.  
  21.     puerto = 32435
  22.  
  23.     ip="0.0.0.0"    
  24.     max_conexiones = 50
  25.     servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  26.  
  27.     servidor.bind((ip, puerto))
  28.     servidor.listen(max_conexiones)
  29.  
  30.     while True:
  31.         cliente, direccion = servidor.accept()
  32.         administrador_de_clientes = threading.Thread(target=administrar_clientes, args=(cliente,))
  33.         administrador_de_clientes.start()
  34.  
  35. if __name__ == '__main__':
  36.  
  37.     Server().run()


En windows funciona perfecto , pero en kivy obtengo esta respuesta 
ERROR: Traceback (most recent call last):
 File "/home/mataeoh/buildozer/.buildozer/android/app/PyInterpreter/PhyInter.py", line 65 in run_script
 File "<string>" , line 11 in <module>
 File "<string>" , line 27 , in server
 File "/home/mataeoh/buildozer/.buildozer/android/plattform/python-for-android.7/socket.py" , line 187, in __init__
error: [Errno 13] Permission denied

Done.

Cualquier sugerencia sera bien recibida , creoque no funciona por un problema de permisos , pero no tengo ni idea de como solucionarlo
Responder
#10
Efectivamente es un problema de permisos. No creo que un socket requiera permisos root para poder ser utilizado. ¿Cuál es la línea de tu código que lanza ese error?
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)