Java Android蓝牙广播接收器未接收

Java Android蓝牙广播接收器未接收,java,android,sockets,bluetooth,Java,Android,Sockets,Bluetooth,我们有一个硬件,可以尝试连接到android手机,因此在android手机上打开服务器插座并进行监听就可以了 我现在遇到的问题是,我们有一个广播接收器在监听ACL_已连接和ACL_已断开 广播接收器没有接收到这些事件,服务器套接字也没有接收来自硬件的连接,它只是停留在accept()方法 为了使其正常工作,我必须先从Android手机连接到硬件,然后从那时起,我将获得所有ACL_已连接/ACL_已断开连接的事件,并且我的服务器套接字正在接受来自硬件的连接 这是正常的行为吗?Android必须先连

我们有一个硬件,可以尝试连接到android手机,因此在android手机上打开服务器插座并进行监听就可以了

我现在遇到的问题是,我们有一个广播接收器在监听ACL_已连接和ACL_已断开

广播接收器没有接收到这些事件,服务器套接字也没有接收来自硬件的连接,它只是停留在
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。