Android 4.0& 4.1蓝牙问题。检测破碎的通信&丢弃配对

时间:2014-10-09 16:40:46

标签: android bluetooth android-bluetooth bluez spp

嘿所有

据我所知,Android的蓝牙堆栈(bluez)已在4.2上被取代。即使他们可能已经修复了许多以前的问题,但由于需要支持旧版本,我仍然需要与它们进行斗争。

如果有人之前处理过这个问题并且能够解决问题,我会非常感激。

问题#1 - 无法检测到损坏的通信(4.0& 4.1 Android,Bluez蓝牙堆栈)

蓝牙应用程序连接到我们自己的自定义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操作(如本例中)检测到损坏的通信是否正确?或者蓝牙收音机在省电期间是否会停机?

问题#2 - 从配对列表中突然下降。

在Android 4.0& 4.1,在某些情况下,设备从配对列表中无法解释丢弃。即使这种情况很少见,有些只在某些特定的设备上......这是一种可以防止手机重新配对和连接的情况。

我注意到 SPP 设备配对正确,但有时,Android设备会显示消息“无法与设备X配对,PIN码或密码不正确”。

注意:对于Android版本< 4.2我们确实使用了不安全的通信( createInsecureRfcommSocket ,因为此版本的其他Android连接问题)。

问题 - 在会话期间刷新此PIN /密码的频率是多少?

这很可能是我们的SPP设备中的一个错误,但是如果没有这个错误,那么任何想法?

万分感谢

0 个答案:

没有答案