Java Android蓝牙广播接收器未接收
我们有一个硬件,可以尝试连接到android手机,因此在android手机上打开服务器插座并进行监听就可以了 我现在遇到的问题是,我们有一个广播接收器在监听ACL_已连接和ACL_已断开 广播接收器没有接收到这些事件,服务器套接字也没有接收来自硬件的连接,它只是停留在Java Android蓝牙广播接收器未接收,java,android,sockets,bluetooth,Java,Android,Sockets,Bluetooth,我们有一个硬件,可以尝试连接到android手机,因此在android手机上打开服务器插座并进行监听就可以了 我现在遇到的问题是,我们有一个广播接收器在监听ACL_已连接和ACL_已断开 广播接收器没有接收到这些事件,服务器套接字也没有接收来自硬件的连接,它只是停留在accept()方法 为了使其正常工作,我必须先从Android手机连接到硬件,然后从那时起,我将获得所有ACL_已连接/ACL_已断开连接的事件,并且我的服务器套接字正在接受来自硬件的连接 这是正常的行为吗?Android必须先连
accept()
方法
为了使其正常工作,我必须先从Android手机连接到硬件,然后从那时起,我将获得所有ACL_已连接/ACL_已断开连接的事件,并且我的服务器套接字正在接受来自硬件的连接
这是正常的行为吗?Android必须先连接一次硬件,然后才能接收ACL\u CONNECTED/ACL\u DISCONNECTED事件?一旦我这样做了,我将始终收到事件,直到我喜欢在设备上重置出厂设置,然后它又是相同的问题
谢谢如果不提供任何代码,很难找出到底是什么错误。不过,我要猜一猜。连接失败的最常见原因是没有提供适当的连接 在大多数情况下,打印机、键盘、耳机等常用设备的最通用UUID是00001101-0000-1000-8000-00805F9B34FB。当你要求你的手机连接到这样一个设备,而你已经使用了这个UUID的大部分时间,它将连接。但是,当您告诉硬件设备连接到手机(初始化连接)时,如果它没有适合您手机的UUID,则无法建立连接 总而言之: 检查您的UUID定义 更新 你的android端代码看起来像这样吗
private class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
public ConnectThread(BluetoothDevice device) {
// Use a temporary object that is later assigned to mmSocket,
// because mmSocket is final
BluetoothSocket tmp = null;
mmDevice = device;
// Get a BluetoothSocket to connect with the given BluetoothDevice
try {
// MY_UUID is the app's UUID string, also used by the server code
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) { }
mmSocket = tmp;
}
public void run() {
// Cancel discovery because it will slow down the connection
mBluetoothAdapter.cancelDiscovery();
try {
// Connect the device through the socket. This will block
// until it succeeds or throws an exception
mmSocket.connect();
} catch (IOException connectException) {
// Unable to connect; close the socket and get out
try {
mmSocket.close();
} catch (IOException closeException) { }
return;
}
// Do work to manage the connection (in a separate thread)
manageConnectedSocket(mmSocket);
}
/** Will cancel an in-progress connection, and close the socket */
public void cancel() {
try {
mmSocket.close();
} catch (IOException e) { }
}
}
如果是这种情况,那么它是客户机而不是服务器。而您的硬件正在监听客户端连接到它,而不是通过另一种方式连接到它。有没有办法知道硬件在客户端连接到Android手机时正在使用哪个UUID?UUID可以被认为是唯一的ID,因此您的Android手机和硬件设备都需要使用相同的ID才能连接但是,在编写代码时,您需要知道哪一个(硬件或设备)将成为服务器,哪一个将成为客户端。我会再次阅读android蓝牙文档来理解这个概念。通常,硬件是服务器,因为它提供数据,而android只是想使用它(所以是客户端)。我认为问题是,当你试图连接硬件时,android没有设置为服务器,因此它没有主动寻找连接。因此,除非手机启动连接,否则硬件永远无法连接到它。希望这是有意义的。我的android应用程序就是服务器,因为我正在打开一个服务器套接字并监听它。硬件配置为客户端,因为它是一种发送心率数据的医疗设备。正如我所说,如果我首先启动从Android作为客户端到硬件的连接,一切都会很好。Android将开始接受来自硬件(客户端)的连接。所以它确实有效,但前提是我从android应用程序启动了硬件连接。所以我想知道这是否正常?但是我认为您已经了解了UUID的一些内容…尝试getUUID(),它可能会返回硬件的UUID。