Как я могу отправить данные через BluetoothSocket Android с pyjnius? - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь отправить данные через BluetoothSocket между двумя планшетами Android. Я создал один, используя ' createRfcommSocketToServiceRecord ', и на обоих устройствах isConnected () 'возвращает True и' getRemoteDevice (). GetName () 'возвращаетс другим устройством, по желанию. Тем не менее, когда я пытаюсь отправлять и получать данные между ними, ничего не получается с обеих сторон. В документации Android для BluetoothAdapter (ссылка) говорится:

Используйте BluetoothDevice # createRfcommSocketToServiceRecord для подключения к этому сокету с другого устройства с использованием того же UUID.

Я попытался запустить код внизу на обоих устройствах. Я также попытался запустить:

server = BluetoothAdapter.getDefaultAdapter().listenUsingRfcommWithServiceRecord('TestServer', UUID.fromString("00001105-0000-1000-8000-00805f9b34fb"))

client, address = server.accept()

... На одном устройстве и код внизу на другом устройстве, что приводит к тому, что ServerSocket просто висит на accept () бесконечно даже после попытки подключенияк нему на другом устройстве. Я думаю, что делаю что-то в корне неправильное, но я некоторое время изучал документы для разработчиков Android и не могу понять, в чем заключается мое недоразумение. Любое просвещение будет высоко оценено.

Я использую Kivy для создания текстового поля для отправки некоторых тестовых данных, но я упростил его здесь.

import threading
import time
from jnius import autoclass

BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter')
BluetoothDevice = autoclass('android.bluetooth.BluetoothDevice')
BluetoothSocket = autoclass('android.bluetooth.BluetoothSocket')
BluetoothServerSocket = autoclass('android.bluetooth.BluetoothServerSocket')
UUID = autoclass('java.util.UUID')

socket = None

for device in BluetoothAdapter.getDefaultAdapter().getBondedDevices().toArray():
    if 'Galaxy Tab' in device.getName():
        socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001105-0000-1000-8000-00805f9b34fb"))
        in_stream = socket.getInputStream()
        out_stream = socket.getOutputStream()
        socket.connect()
        break

def receive(self, instance=None):
    while True:
        time.sleep(0.5)
        out_stream.write('test'.encode())
        out_stream.flush()
        print(in_stream.read())

threading.Thread(target=receive).start()
...