android蓝牙4.0断开自动连接,Android 4.0和4.1蓝牙问题.检测断开的通信和丢弃配对...

本文探讨了Android设备在4.2版本之前使用Bluez蓝牙堆栈遇到的两个主要问题。问题一是应用程序在省电模式下与自定义SPP设备的连接可能出现无法检测到的断开,尽管日志未报告错误。问题二是设备有时会从配对列表中消失,导致无法重新配对。针对这些问题,作者提出了关于连接稳定性检查和蓝牙堆栈在省电模式下的行为的疑问,并寻求可能的解决方案。
摘要由CSDN通过智能技术生成

嘿,所有,

我明白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): bytes sending : [B@41e0bcf8

D/com.our.app.bluetooth( 8711): bluetooth bytes to write :[B@41e0bcf8

V/BluetoothSocket.cpp( 8711): writeNative

D/com.our.app.bluetooth( 8711): bluetooth bytes written :[B@41e0bcf8

问题 – 假设在应用程序级别检查和心跳线之间,在这种情况下,在套接字I / O操作上应该检测到破坏的通信是正确的吗?或者可以在省电时蓝牙收音机是否下降?

问题#2 – 从配对列表突然下降.

在Android 4.0& 4.1,在某些情况下,设备从配对列表中无法解释.即使这是罕见的,有些只是在某些特定的设备…这是一种情况下,防止手机重新配对和连接容易.

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

注意:对于Android版本< 4.2我们使用不安全的通信(createInsecureRfcommSocket,由于此版本的其他android连接问题). 问题 – 会话期间刷新PIN /密码的频率如何? 这可能是我们的SPP设备中的一个错误,但是有一些不是什么想法的机会呢? 太感谢了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值