嘿所有,
据我所知,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();
}
}
Run Code Online (Sandbox Code Playgroud)
logcat:
D/com.our.app.bluetooth(8711):发送字节:[B @ 41e0bcf8
D/com.our.app.bluetooth(8711):要写的蓝牙字节:[B @ …
我一直在研究一个通过套接字传输xml一段时间的系统.我从来没有真正理解选择xml而不是自定义协议的真正优势.
但我确实看到很多开发人员(特别是原来的Web开发人员)设置了这种实现(xml over socket).
我明白这更"人性化"(这就是我一直听到的).
但,
Xml携带了大量的字符,导致巨大的消息,实际上内容非常简单.
邮件大小各不相同,因此您需要保证以特定字符或字符串模式终止邮件.
解析xml时会有更多的开销
由于所有这些原因,当我可以使用固定大小的消息使用自定义协议设置我的系统时,我仍然怀疑考虑使用针对新系统的套接字XML.避免传输大量消息并且性能在客户端大小上解析xml.
这样想我错了吗?系统架构方面的"最佳"是什么?
问候