谈谈蓝牙4.0(BLE)模块与安卓的数据交互

本文介绍了开发者在Android平台上使用蓝牙4.0 Low Energy(BLE)与TI CC2540模块进行数据交互的实践经验。通过Google官方提供的源码作为基础,详细讲解了从设备扫描、连接、数据发送与接收的完整流程,包括如何设置特征值、处理回调以及利用广播进行通信。文章特别强调了在写入数据时注意匹配模块定义的Byte字节长度,以及启用Notification特性来实现消息接收。
摘要由CSDN通过智能技术生成

开发蓝牙4.0也快两个月了,给我的感受还是颇多的。
我开发的是与TI的蓝牙模块CC2540交互的安卓端蓝牙软件,对于安卓都不是很熟悉的我,是一个不小的挑战。
废话不多说,直接谈项目。
我用的是google官方的源码,它本身把很多基本框架都搭好了。直接就能运行,当然前提是在Android Studio上,如果是Eclipse上还需要稍作改动。我们先来看下代码。它主要有两个Avtivity和一个Service组成,顾名思义,两个Activity的用途分别为设备扫描与设备管理。
这里我不准备介绍基本的BLE知识(自行百度即可),我只是说一下一些需要注意的地方,特别是我百度不到的好多东西,希望跟大家分享一下。
一开始的软件已经可以查看Service和Characteristic的UUID,不过只能接收消息,原因大概是这个Sample当初设计的时候就只负责接收。当然要发送也简单,只要在BluetoothLeService中加writeCharacteristic方法。

public boolean writeCharacteristic(BluetoothGattCharacteristic charac,String message){
        //check mBluetoothGatt is available
        if (mBluetoothGatt == null) {
            Log.e(TAG, "lost connection");
            return false;
        }
        charac.setValue(message.getBytes());
        boolean status = mBluetoothGatt.writeCharacteristic(charac);
        return status;
}

写数据比较简单,直接调用这个方法即可。当然,这里也有个陷阱,我们发现,如果你在cc2540中定义了Byte字节的长度,那么在charac.setValue()中的数组长度要跟其相同,不然模块是收不到的。
我们发现在很多地方都用到了BluetoothGattCharacteristic这个类,即特性,BLE就是靠改变特性值来传递数据的,那么,这些BluetoothGattCharacteristic是从哪里得到的呢?我们知道,BluetoothGattCharacteristic是BluetoothGattService中的属性,我们要得到BluetoothGattCharacteristic,就要先得到BluetoothGattService。那要怎么样得到BluetoothGattService呢?

        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            String intentAction;
            if (newState == BluetoothProfile.STATE_CO
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值