安卓蓝牙4.0开发

  这里不是说开发的技术代码,技术和代码可以在网上找到很多的例子,而我要说的是开发中遇到的一些坑;

在做蓝牙设备和手机连接开发过程中,曾犯的一个错误,在这里说一下,希望遇到朋友可以不用踩这个坑。不多说,上重点:因为我是最开始做的是2.0的蓝牙,用的是socket通信并未发现这个问题,后来用4.0开发的时候,用的是mBluetoothGatt.writeCharacteristic这类的通讯方法(但是底层用的是不是socket的我暂时还未研究),后来在通讯的时候,我发现原来从手机端发的数据只能发送20个字节,后面多出的就自动省略了,但是从蓝牙设备发到手机的数据不管多大都能接收,然后在网上找了些资料,才知道,并不是蓝牙的问题,而是蓝牙4.0规定的其实是20多个字节,但是有几个是其他占用,剩下20个才是能真正交流的数据大小规格,原因好像是蓝牙4.0是低功耗的,蓝牙设备都是微型设备可能没有那么大的存储空间,当然也可能有其他的原因。所以使用蓝牙4.0开发的小伙伴们,可以采取分包的发送方式或者其他的方式来发送大数据。

下面是我用的一个小方法,有需要的可以用一用

final byte[] data = msg.getBytes();

while (fenbao) {
if (charSendBufferPos + 20 > data.length) {
Len = (byte) (data.length - charSendBufferPos);
fenbao=false;
}
byte[] bao = new byte[Len];
for (byte i = 0; i < Len; i++) {
bao[i] = data[i + charSendBufferPos];
}
target_chara.setValue(bao);
// 调用蓝牙服务的写特征值方法实现发送数据
mBluetoothLeService.writeCharacteristic(target_chara);
charSendBufferPos += 20;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

阅读更多
换一批

没有更多推荐了,返回首页