Java Android bluetooth IOException:读取失败,套接字可能已关闭或超时,读取ret:-1
我在Android蓝牙API中连接客户端套接字时遇到问题。 我已经读过这些帖子了:,还有 根据这些帖子,我编写了如下代码,但仍然不起作用:Java Android bluetooth IOException:读取失败,套接字可能已关闭或超时,读取ret:-1,java,android,bluetooth,kotlin,Java,Android,Bluetooth,Kotlin,我在Android蓝牙API中连接客户端套接字时遇到问题。 我已经读过这些帖子了:,还有 根据这些帖子,我编写了如下代码,但仍然不起作用: class MainActivity : AppCompatActivity() { private val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() private var connectThread: ConnectThread? = null overrid
class MainActivity : AppCompatActivity()
{
private val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
private var connectThread: ConnectThread? = null
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (bluetoothAdapter != null)
{
if (!bluetoothAdapter.isEnabled)
bluetoothAdapter.enable()
val devices = bluetoothAdapter.bondedDevices.toTypedArray()
if (devices.isNotEmpty())
{
connectThread = ConnectThread(devices[0])
connectThread!!.run()
}
}
else
Log.i("BluetoothTest", "No bluetooth supported")
}
override fun onDestroy()
{
super.onDestroy()
connectThread!!.cancel()
}
private inner class ConnectThread(device: BluetoothDevice) : Thread()
{
//private val socket = device.createRfcommSocketToServiceRecord(UUID.fromString ("00001101-0000-1000-8000-00805F9B34FB"))
private val socket = device.javaClass.getMethod("createRfcommSocket", (Int::class
.javaPrimitiveType)).invoke(device, 2) as BluetoothSocket
override fun run()
{
bluetoothAdapter.cancelDiscovery()
socket.connect()
}
fun cancel()
{
socket.close()
}
}
}
以下是socket.connect()上返回的错误日志:
问题似乎出现在Android 4.3之后,因为套接字的端口值
我使用的是安卓7.1和8.1
有人知道如何在Android上使用蓝牙吗?最后,根本原因是无法读取套接字的输入流。这是因为服务器端没有具有相同UUID的开放套接字 看 因此,为了解决这个问题,我们需要一个在另一端具有相同UUID的侦听套接字,对我来说,它是python中的一个覆盆子:
from bluetooth import *
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "YOUR UUID"
advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
print("Waiting for connection on RFCOMM channel %d" % port)
client_sock, client_info = server_sock.accept()
print("Accepted connection from ", client_info)
try:
while True:
data = client_sock.recv(1024)
if len(data) == 0: break
print("received [%s]" % data)
except IOError:
pass
print("disconnected")
client_sock.close()
server_sock.close()
print("all done")
从
from bluetooth import *
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "YOUR UUID"
advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
print("Waiting for connection on RFCOMM channel %d" % port)
client_sock, client_info = server_sock.accept()
print("Accepted connection from ", client_info)
try:
while True:
data = client_sock.recv(1024)
if len(data) == 0: break
print("received [%s]" % data)
except IOError:
pass
print("disconnected")
client_sock.close()
server_sock.close()
print("all done")