Я пытаюсь отправить данные через 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()