我有:1)带蓝牙连接器的嵌入式设备,我和BlueZ一起使用,2)我有一部Android手机正在编写应用程序。
目标:我想确保当这两个设备彼此靠近时,它们会快速检测到彼此并建立通信。不幸的是,我正在努力解决Android上可行的复杂功能和节能问题。
初步设计:最初,我一直在思考和实施以下内容 -
嵌入式设备:始终处于可发现模式,创建服务,运行RFCOMM服务器以接受多个连接。
Android手机:收听广播意图,告诉我嵌入式设备(可发现)何时在附近,然后创建一个RFCOMM客户端套接字。
我对这种设计的困难在于,当我期待它时,我没有意图。即使我打开嵌入式设备并将Android手机的蓝牙适配器关闭/开启...... 没有接收到这些广播意图:
BluetoothDevice.ACTION_FOUND
BluetoothDevice.ACTION_ACL_CONNECTED
BluetoothDevice.ACTION_BOND_STATE_CHANGED
唯一可行的方法是定期让手机尝试连接蓝牙设备的RFCOMM插座,或周期性地触发蓝牙扫描(两者功率效率低)。这将触发ACTION_FOUND
和ACTION_ACL_CONNECTED
。如果我关闭嵌入式设备,我将收到ACTION_ACL_DISCONNECTED
。同样的问题是,如果我没有明确让手机尝试启动套接字连接,则不会收到这些内容。这对手机的电源效率不利。
我的逻辑是否向后?嵌入式设备是否应跟踪与之配对的蓝牙MAC地址并成为RFCOMM客户端,而Android应用程序会创建服务并且是RFCOMM服务器只是闲逛,等待连接?这似乎在逻辑上是倒退的,但是......我不认为Android手机会创建服务或成为实现这一目标的服务器。
如果我进入我的车,它几乎立即设法与我的手机建立连接。所以,我知道这是可能的!
我所遇到的具体问题是双重的:1)我的初始设计是否存在问题"为了使它更有效,2)我提出的第二个逻辑是什么样的汽车用于建立快速通信和频繁轮询? (因为汽车的电池电量不是问题......)