在 android 上使用 pyjnius 连接到 wifi 网络
Posted
技术标签:
【中文标题】在 android 上使用 pyjnius 连接到 wifi 网络【英文标题】:Connect to a wifi network with pyjnius on android 【发布时间】:2021-03-29 03:39:22 【问题描述】:我正在为 android 制作一个扫描 Wi-Fi 网络的应用程序,我已经发现了如何在 Android 中使用 pyjnius 扫描 Wi-Fi 网络,但我仍然不知道如何连接到 Wi-Fi与 pyjnius 建立网络,我已经看到如何在 kotlin 中做到这一点,我也尝试过对 pyjnius 做同样的事情,但它对我不起作用,这是我的代码
def conect(self):
Contexto = autoclass('android.content.Context')
ConnectivityManager = autoclass('android.net.ConnectivityManager')
WifiConfiguration = autoclass('android.net.wifi.WifiConfiguration')
WifiManager = autoclass('android.net.wifi.WifiManager')
Actividad = autoclass('android.app.Activity')
PythonActivity = autoclass('org.renpy.android.PythonActivity')
activity = PythonActivity.mActivity
service = activity.getSystemService(Contexto.WIFI_SERVICE)
#String = jnius.autoclass("java.lang.String")
WifiConfiguration.SSID ="TURBONETT_295786"
WifiConfiguration.preSharedKey = "KMgApsqz"
p = service.addNetwork(WifiConfiguration)
#service.getConfiguredNetworks()
service.disconnect()
service.enableNetwork(p, True)
#service.startScan()
service.reconnect()
当我运行这个函数时,我得到了这个错误
jnius.jnius.JavaException: JVM exception occurred: Illegal reason value: 6619241
如果有人能告诉我我做错了,我将不胜感激,谢谢。
【问题讨论】:
【参考方案1】:我已经设法让它工作了,这是一个如何使用 kivy 和 Pyjnius 连接到 Wifi 网络的小例子,我希望它对某人有所帮助,不客气。
import kivy
from jnius import autoclass
from kivymd.app import MDApp
from kivy.lang.builder import Builder
import kivymd
from kivymd.uix.button import MDRoundFlatButton
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.toast import toast
String = autoclass('java.lang.String')
WifiConfigure = autoclass('android.net.wifi.WifiConfiguration')
PythonActivity = autoclass('org.kivy.android.PythonActivity')
activity = PythonActivity.mActivity
service = activity.getSystemService("wifi")
WifiManager = autoclass('android.net.wifi.WifiManager')
#The WifiManager methods are static which means that you do not have to instantiate the class
WifiConfig = WifiConfigure()
#Instant the class since its methods are public and not static
Builder.load_string('''
<Principal>:
MDRoundFlatButton:
text: 'Conectar'
pos_hint: "center_x": .5, "center_y": .64
on_press:
root.Conectar()
MDCard:
id: dos
elevation: 0
padding: '0dp'
size_hint: .95, .07
pos_hint: "center_x": .5, "center_y": .85
border_radius: 20
radius: [10]
TextInput:
id: t1
text: ''
hint_text: 'Nombre de la Red'
pos_hint: "center_x": .55, "center_y": .84
size_hint: .7, .05
text_color: 1, 1, 1, 1
multiline: False
background_color: 0,0,0,0
foreground_color: 1,1,1,1
MDCard:
id: dos
elevation: 0
padding: '0dp'
size_hint: .95, .07
pos_hint: "center_x": .5, "center_y": .75
border_radius: 20
radius: [10]
TextInput:
id: t2
text: ''
hint_text: 'Contraseña'
pos_hint: "center_x": .55, "center_y": .74
size_hint: .7, .05
text_color: 1, 1, 1, 1
multiline: False
background_color: 0,0,0,0
foreground_color: 1,1,1,1
''')
class Principal(Screen):
def __init__(self, **kwargs):
super(Principal, self).__init__(**kwargs)
def Conectar(self):
toast("Conectando...")
Connectname = String(self.ids.t1.text)
connectkey = String(self.ids.t2.text)
WifiConfig.SSID = "\""+Connectname.toString()+"\""
WifiConfig.preSharedKey ="\""+ connectkey.toString()+"\""
added = WifiManager.addNetwork(WifiConfig)
WifiManager.enableNetwork(added, True)
class Inicia (MDApp):
def build(self):
self.theme_cls.theme_style = 'Dark'
hijo = ScreenManager()
princ = Principal(name="principal")
hijo.add_widget(princ)
return hijo
Inicia().run()
Pydroid3 制造
【讨论】:
以上是关于在 android 上使用 pyjnius 连接到 wifi 网络的主要内容,如果未能解决你的问题,请参考以下文章
通过 pyjnius 在 kivy 中使用 MediaStore
如何使用 Pyjnius 正确访问 Android java 类
如何使用 kivy、pyjnius 为 android 制作 GPS 应用程序?