Python for android:PermissionError:UDP 通信中的 [Errno 13]

问题描述

解决我忘记了在 buildozer.spec 文件中对 android 的许可

它是用于与机器人进行 UDP 通信的代码的一部分。整个应用程序工作正常,但是当“线程”吃午饭时,我收到此错误:PermissionError: [Errno 13] Permission denied。在笔记本电脑/PC 上也能正常工作。 在电话应用程序上拥有所有权限。如何解决这个问题?

in Communication_UDP_ESP
12-22 16:14:01.853  2727  4393 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/socket.py",line 231,in __init__
12-22 16:14:01.854  2727  4393 I python  :  PermissionError: [Errno 13] Permission denied
12-22 16:14:02.592  2727  4396 I python  :  Exception in thread Thread-32:
12-22 16:14:02.593  2727  4396 I python  :  Traceback (most recent call last):
12-22 16:14:02.593  2727  4396 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/threading.py",line 932,in _bootstrap_inner
12-22 16:14:02.594  2727  4396 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/RoboT/jnius/__init__.py",line 84,in jnius_thread_hook
12-22 16:14:02.595  2727  4396 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/threading.py",line 870,in run
12-22 16:14:02.596  2727  4396 I python  :    File "/home/ms/RoXv2/.buildozer/android/app/main.py",line 648,in Communication_UDP_ESP
12-22 16:14:02.596  2727  4396 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/socket.py",in __init__
12-22 16:14:02.597  2727  4396 I python  :  PermissionError: [Errno 13] Permission denied
12-22 16:20:09.556  2727  4597 I python  :  Exception in thread Thread-34:
12-22 16:20:09.557  2727  4597 I python  :  Traceback (most recent call last):
12-22 16:20:09.557  2727  4597 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/threading.py",in _bootstrap_inner
12-22 16:20:09.558  2727  4597 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/RoboT/jnius/__init__.py",in jnius_thread_hook
12-22 16:20:09.561  2727  4597 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/threading.py",in run
12-22 16:20:09.562  2727  4597 I python  :    File "/home/ms/RoXv2/.buildozer/android/app/main.py",in Communication_UDP_ESP
12-22 16:20:09.563  2727  4597 I python  :    File "/home/ms/RoXv2/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/socket.py",in __init__
12-22 16:20:09.563  2727  4597 I python  :  PermissionError: [Errno 13] Permission denied

负责UDP通信的部分应用

def do_something(self):
    global StopRunUDP,OnceRunUDP
    #print(StopRunUDP)
    if not OnceRunUDP:
        StopRunUDP = True
        OnceRunUDP = True

   # print('after IF')
    #print(StopRunUDP)
    # create the thread to invoke other_func with arguments (2,5)
    t1 = Thread(target=self.Communication_UDP_ESP)
    # set daemon to true so the thread dies when app is closed
    t1.daemon = True            # Jesli True -> background worker,if false
    # start the thread
    t1.start()


def Stop_UDP(self):    # Z niewiadomych przyczyn nie uruchamia sie ...
    global StopRunUDP,OnceRunUDP           # próba przynajmniej zkończenia watku other_func
    #print(StopRunUDP)
    StopRunUDP = False
    OnceRunUDP = False
    #print('after StopUDP')
    #print(StopRunUDP)


def Communication_UDP_ESP(self):
    global StopRunUDP,OnceRunUDP
    global Data1,DataToSend,UDP_IP,UDP_PORT
    global AccelX,AccelY,AccelZ,GyroX,GyroY,GyroZ,Battery,Temp
                                 # Internet     # UDP
    sock = socket.socket(socket.AF_INET,socket.soCK_DGRAM)  # Tworzenie / podlączenie socketa
    sock.sendto(MESSAGE,(UDP_IP,UDP_PORT))
    sock.settimeout(0.3) # najwyrażnej rozwiązło problem,(socket.setblocking)
                # jesli false to nie mrozi progrmu w oczekiwaniu na dane jesli true,mrozi
    #lost = 1

    def Save_Data_From_ESP(Data):
        ... only caluculate data




    while StopRunUDP:
        # lost = lost+1     # for tests
        # print(lost)
        # if lost >90000 :
        #     lost = 0

        mili_Start = time.time()
        try:
            Data,addr = sock.recvfrom(16)  # buffer size is 15 bytes
        except:
            print("error")

        try:
            if len(Data) > 0:  # jesli bufor wiekszy od zera ( linijak wyżej,albo bedzie,albo bedzie zero ....)
                Save_Data_From_ESP(Data)
               # print(Data)
                # print("received message: %s" % Data)  # wypisz dane
                Data = []  # zerowanie buforu,ale chyba niekonieczne
                sock.sendto(DataToSend,UDP_PORT))  # wysłanie wiadomości zwrotnej
        except:
            print("erno2")

        mili_Stop = time.time()
        TimeOut = mili_Stop - mili_Start
        #print(TimeOut)
        if TimeOut > 0.2 :
            print("Coś poszło nie tak,sprawdź połączenie")
            sock.sendto(DataToSend,UDP_PORT))  # wysłanie wiadomości zwrotnej

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)