#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
. Я раскомментировал строку разрешений, которая по умолчанию содержит ИНТЕРНЕТ, и все сработало как по маслу!