Foros Python

Versión completa: aplicacion para abrir una url especifica
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
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
Hola. Sí, puedes usar el módulo estándar webbrowser: https://recursospython.com/guias-y-manua...ebbrowser/.

Saludos!
Lo he probado y desde windows consigue abrir el navegador con una url determinada , pero en android no hace nada , alguna idea?
¿Estás usando Kivy?
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:

Código:
from kivy.utils import platform

def launch_webbrowser(url):
    import webbrowser
    if platform == 'android':
        from jnius import autoclass, cast
        def open_url(url):
            PythonActivity = autoclass('org.kivy.android.PythonActivity')
            activity = PythonActivity.mActivity
            Intent = autoclass('android.content.Intent')
            Uri = autoclass('android.net.Uri')
            browserIntent = Intent()
            browserIntent.setAction(Intent.ACTION_VIEW)
            browserIntent.setData(Uri.parse(url))
            currentActivity = cast('android.app.Activity', activity)
            currentActivity.startActivity(browserIntent)

        # Web browser support.
        class AndroidBrowser(object):
            def open(self, url, new=0, autoraise=True):
                open_url(url)
            def open_new(self, url):
                open_url(url)
            def open_new_tab(self, url):
                open_url(url)

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

    webbrowser.open(url)

launch_webbrowser('http://www.kivy.org')
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

Código:
import urllib2
import socket
import threading
import webbrowser

       
def administrar_clientes(socket_cliente):
   peticion = socket_cliente.recv(1024)
   print " %s a las %s" % (peticion,time.strftime("%c"))
   if peticion=="1":
[*]       //Aqui vendria el codigo anterior que hace la llamada a la url.

    
   respuesta = "Hola , estas conectado"
   socket_cliente.send(respuesta)
   socket_cliente.close()
   

puerto = 32435

ip="0.0.0.0"    
max_conexiones = 50
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

servidor.bind((ip, puerto))
servidor.listen(max_conexiones)

mensaje = "
[*]Servidor iniciado : %s" % time.strftime("%c")

print mensaje
#graba_texto(mensaje,'c:\Lector\log.txt')
print "[*]Esperando conexiones en %s:%d" % (ip, puerto)

while True:
   cliente, direccion = servidor.accept()
   print "[*]Conexion establecida con %s:%d" % (direccion[0], direccion[1])
   administrador_de_clientes = threading.Thread(target=administrar_clientes, args=(cliente,))
   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
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
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
Este es el codigo reconvertido a kivy
Código:
import kivy
from kivy.app import App
   
import socket
import threading
import time

import webbrowser

class Server(App):
       
    def administrar_clientes(socket_cliente):
        peticion = socket_cliente.recv(1024)
        if peticion!="":
            webbrowser.open(peticion)
        respuesta = "Hola , estas conectado"
        socket_cliente.send(respuesta)
        socket_cliente.close()
    

    puerto = 32435

    ip="0.0.0.0"    
    max_conexiones = 50
    servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
    servidor.bind((ip, puerto))
    servidor.listen(max_conexiones)

    while True:
        cliente, direccion = servidor.accept()
        administrador_de_clientes = threading.Thread(target=administrar_clientes, args=(cliente,))
        administrador_de_clientes.start()

if __name__ == '__main__':

    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
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?
Páginas: 1 2