android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2

Android蓝牙4.0 Ble读写数据详解 -2

上一篇说了如何扫描与链接蓝牙 这篇文章讲讲与蓝牙的数据传输,与一些踩到的坑。

先介绍一款调试工具,专门调试Ble蓝牙的app。名字叫:nRF-Connect 谷歌应用商店也能下载到。

这里我先连接一个蓝牙设备 贴几个截图。

UUID的话 就相当于钥匙,蓝牙设备当中有通道,那么通道是需要UUID进行匹配的

当连接上设备之后,可以看到UUID的通道 接下来,按照设备厂商提供的文档,找到我们需要的UUID通道

比如说我这里需要的是0x6a的Service通道 然后点开最后一个Service通道查看

展开Service后 可以看到有两个Characteristic通道

我们看Properties属性 一个是NOTIFY 一个是WRITE 也有可能会有READ这个属性的通道

可以拿这个app输出写出指令给蓝牙,在不清楚是蓝牙的问题还是自己的问题的时候,这个工具还是挺好使的。

Notify的话,需要注意这个Descriptors的UUID 这个在注册Notify的时候,需要用到,这里虽然看不全,但是之后可以通过打印得到。

简单说一下这三种属性的通道的用途

WRITE:顾名思义,写的意思,该通道是用来向蓝牙设备写出数据的通道

READ:向蓝牙设备进行读取数据的通道 这个通道有一个坑 后续会详细写上

Notify:该通道需要注册监听,这是一个通知的通道,蓝牙向你传输数据的话,就能直接收到监听。

我这边的话 因为一些原因,所以没有使用READ通道获取数据 只用了Notify通道 当然 也会讲讲怎么使用READ

准备工作

先将UUID管理起来,我这里的话 采用静态常量的形式保存起来了。

public class UUIDManager {

/**

* 服务的UUID

*/

public static final String SERVICE_UUID = "00006a00-0000-1000-8000-00805f9b34fb";

/**

* 订阅通知的UUID

*/

public static final String NOTIFY_UUID = "00006a02-0000-1000-8000-00805f9b34fb";

/**

* 写出数据的UUID

*/

public static final String WRITE_UUID = "00006a02-0000-1000-8000-00805f9b34fb";

/**

* NOTIFY里面的Descriptor UUID

*/

public static final String NOTIFY_DESCRIPTOR = "00002902-0000-1000-8000-00805f9b34fb";

}

处理通知回调接口

蓝牙的数据回调,其实并不是回调到主线程当中,所以如果接收到数据之后,就进行视图操作的话,是会失败的。

所以我打算切换到主线程进行回调,当然,也可以使用EventBus,不过我不喜欢这东西就没去用。

回调接口的话,打算使用list集合存储起来,然后回调到各个需要数据的地方。 创建以下三个类

/**

* Created by Pencilso on 2017/4/20.

* 蓝牙数据回调监听接口

*/

public interface BlueNotifyListener {

public void onNotify(Message notify);

}

/**

* Created by Pencilso on 2017/4/25.

* 处理回调所有接口

*/

public class NotifyThread implements Runnable {

private List listeners;

private Message notify;

@Override

public void run() {

if (notify == null || listeners==null)

return;

try {

Iterator iterator = listeners.iterator();

while (iterator.hasNext()) {

BlueNotifyListener next = iterator.next();

if (next == null)

iterator.remove();

else

next.onNotify(notify);

}

} catch (Exception e) {

e.printStackTrace();

}

}

public void setListeners(List listeners) {

this.listeners = listeners;

}

public void setNotify(Message notify) {

this.notify = notify;

}

}

/**

* Created by Pencilso on 2017/4/26.

* 蓝牙的Code类 用来自定义回调的标识

*/

public class BlueCodeUtils {

/**

* 蓝牙状态 已连接

*/

public static final int BLUETOOTH_STATE_CONNECT = 0x1;

/**

* 蓝牙状态 已断开

*/

public static final int BLUETOOTH_STATE_DISCONNECT

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值