socket sendto не работает на Android (kivy, buildozer)

#python-3.x #sockets #kivy #buildozer #kivymd

#python-3.x #сокеты #kivy #buildozer #kivymd

Вопрос:

Я пишу скрипт в kivymd для переключения светодиода, который подключен к микроконтроллеру. Предполагается, что скрипт отправляет сообщение сокета UDP на сервер MCU, которое включает команду для переключения светодиода. Скрипт отлично работает в 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()
  

Комментарии:

1. Обрабатываете ли вы разрешения?

2. Единственное разрешение, которое я мог видеть на своем телефоне, — это разрешение на хранение. Вы имеете в виду тип разрешения?

Ответ №1:

Я только что узнал, что файл buildozer.spec содержит разрешения, которые можно настроить для включения INTERNET . Я раскомментировал строку разрешений, которая по умолчанию содержит ИНТЕРНЕТ, и все сработало как по маслу!