0

我正在尝试通过两个 Android 平板电脑之间的 BluetoothSocket 发送数据。我使用“ createRfcommSocketToServiceRecord ”创建了一个,并且在两个设备上“ isConnected() ”返回 True,“ getRemoteDevice().getName() ”根据需要返回另一个设备。但是,当我尝试在它们之间发送和接收数据时,两端都没有收到任何内容。在 BluetoothAdapter (link)的 Android 文档中,它指出:

使用 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()
4

0 回答 0