socket sendto 在 Android 上不工作(kivy,buildozer)

socket sendto not working on Android (kivy, buildozer)

我正在 kivymd 中编写脚本来切换连接到微控制器的 LED。该脚本应该向 MCU 服务器发送一个套接字 UDP 消息,其中包括一个切换 LED 的命令。该脚本在 windows 上工作正常,并且使用 buildozer 构建成功(虽然未在此脚本中显示,但我尝试了另一个版本来简单地将 hello world 打印到 MDLabel 并且它有效)但是每当我按下 btn_led 在 Android,应用程序关闭。知道为什么会发生这种情况以及如何解决它吗?

from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivy.uix.screenmanager import Screen
import socket


class TableApp(MDApp):

    def build(self):
     
        # Add Widgets
        screen = Screen()

        btn_led = MDFlatButton(text="Toggle LED", on_release=self.toggle_led,
                           pos_hint={"center_x": 0.5, "center_y": 0.5})

        screen.add_widget(btn_led)
        return screen

    def toggle_led(self, event):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.sendto(b"LED", ("10.0.0.167", 1111))
        s.close()


TableApp().run()

我刚刚了解到 buildozer.spec 文件包含可以配置为包括 INTERNET 的权限。我取消了默认包含 INTERNET 的权限行的注释,一切都很顺利!