嘿所有,
据我所知,Android的蓝牙堆栈(bluez)已在4.2上被取代。即使他们可能已经修复了许多以前的问题,但由于需要支持旧版本,我仍然需要与它们进行斗争。
如果有人之前处理过这个问题并且能够解决问题,我会非常感激。
蓝牙应用程序连接到我们自己的自定义SPP设备(我们使用标准 UUID )。它使用蓝牙服务,运行在它自己的进程上。这个应用程序要求运行蓝牙工作几个小时。
在省电/屏幕锁定期间,当数据通过蓝牙无线电进入时,应用会保持活着,并且我也会检查定期设置警报,我请求CPU时间重新连接&继续工作(如有必要)
现在;系统在大多数情况下都能正常工作,但是,在屏幕 锁定和省电模式的极少数情况下,我不明白的原因,在写入 输出流(蓝牙套接字)后,一切似乎都没有检测到断开的连接。 spp设备仍然表明连接&配对有效,但一无所获。
在Android方面,日志显示对 BluetoothSocket.cpp :: writeNative 的本机调用(假设它与 bluez 蓝牙堆栈直接相关)将字节正确写入蓝牙无线电,而不报告任何类型的错误。
写入输出流的代码段:
public void write(byte[] bytes) {
try {
Log.d(LOGGER.TAG_BLUETOOTH," bluetooth bytes to write : "+bytes);
mmOutStream.write(bytes);
mmOutStream.flush();
Log.d(LOGGER.TAG_BLUETOOTH," bluetooth bytes written : "+bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
logcat:
D / com.our.app.bluetooth(8711):字节发送:[B @ 41e0bcf8
D / com.our.app.bluetooth(8711):要写的蓝牙字节:[B @ 41e0bcf8
V / BluetoothSocket.cpp(8711):writeNative
D / com.our.app.bluetooth(8711):写入蓝牙字节:[B @ 41e0bcf8
问题 - 假设除了应用程序级别检查和心跳之外,应该在套接字I / O操作(如本例中)检测到损坏的通信是否正确?或者蓝牙收音机在省电期间是否会停机?
在Android 4.0& 4.1,在某些情况下,设备从配对列表中无法解释丢弃。即使这种情况很少见,有些只在某些特定的设备上......这是一种可以防止手机重新配对和连接的情况。
我注意到 SPP 设备配对正确,但有时,Android设备会显示消息“无法与设备X配对,PIN码或密码不正确”。
注意:对于Android版本< 4.2我们确实使用了不安全的通信( createInsecureRfcommSocket ,因为此版本的其他Android连接问题)。
问题 - 在会话期间刷新此PIN /密码的频率是多少?
这很可能是我们的SPP设备中的一个错误,但是如果没有这个错误,那么任何想法?
万分感谢。