android 蓝牙开发笔记

android4.3(18)之后蓝牙和之前2.1的蓝牙开发不同。

4.3以及之后的版本主要有android.bluetooth.BlueToothManager,  android.bluetooth.BlueToothAdapter,   android.bluetooth.BlueToothGatt来完成

首先4.3蓝牙是通过回调机制来实现功能的。还有蓝牙的回调是单线程的,也就是说要对一个蓝牙设备同时进行读和写,一定要把这个过程串一起来,首先去读,在回调中再去写才能实现。

1、Bluetoothmanager,BluetoothAdapter在系统中都是单例的,不需要重新创建,直接获取

       关键代码:

BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

BLuetoothAdapter mBluetoothAdapter = mBluetoothManager.getAdapter();

通过bluetoothadapter来获取给定蓝牙地址的需要连接的设备

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);


得到bluetoothgatt

BluetoothGatt gatt = device.connectGatt(Context context,boolean autoConnect,BluetoothGattCallback callback);


BluetoothGattService service = getService(UUID uuid)得到设备的服务,一个设备包含多个服务,一个服务包含多个特征值

BluetoothGattCharacteristic characteristic = service.getCharacteristic(UUID uuid);

characteristic .setValue(String/byte[]);

gatt .readCharacteristic(characteristic );  //调用BluetoothGattCallback的oncharacteristicRead;

gatt.CharacteristicNotification(characteristic ,boolean b);//调用onCharacteristicChanged

gatt.writeCharacteristic(characteristic );//调用onCharacteristicWriter();


//下面是摘录部分:

Android4.3 规范了BLE的API,但是直到目前的4.4,还有些功能不完善。

在BLE协议中,有两个角色,周边(Periphery)和中央(Central);周边是数据提供者,中央是数据使用/处理者;在iOS SDK里面,可以把一个iOS设备作为一个周边,也可以作为一个中央;但是在Android SDK里面,直到目前最新的Android4.4.2,Android手机只能作为中央来使用和处理数据;那数据从哪儿来?从BLE设备来,现在的很多可穿戴设备都是用BLE来提供数据的。

一个中央可以同时连接多个周边,但是一个周边某一时刻只能连接一个中央。

大概了解了概念后,看看Android BLE SDK的四个关键类(class):

a) BluetoothGattServer作为周边来提供数据;BluetoothGattServerCallback返回周边的状态。

b) BluetoothGatt作为中央来使用和处理数据;BluetoothGattCallback返回中央的状态和周边提供的数据。

因为我们讨论的是Android的BLE SDK,下面所有的BluetoothGattServer代表周边,BluetoothGatt代表中央。

一.创建一个周边(虽然目前周边API在Android手机上不工作,但还是看看)

a)先看看周边用到的class,蓝色椭圆

\

b)说明:

每一个周边BluetoothGattServer,包含多个服务Service,每一个Service包含多个特征Characteristic。

1.new一个特征:character = new BluetoothGattCharacteristic(
UUID.fromString(characteristicUUID),
BluetoothGattCharacteristic.PROPERTY_NOTIFY,
BluetoothGattCharacteristic.PERMISSION_READ);

2.new一个服务:service = new BluetoothGattService(UUID.fromString(serviceUUID),
BluetoothGattService.SERVICE_TYPE_PRIMARY);

3.把特征添加到服务:service.addCharacteristic(character);

4.获取BluetoothManager:manager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

5.获取/打开周边:BluetoothGattServer server = manager.openGattServer(this,
new BluetoothGattServerCallback(){...});

6.把service添加到周边:server.addService(service);

7.开始广播service:Google还没有广播Service的API,等吧!!!!!所以目前我们还不能让一个Android手机作为周边来提供数据。


二.创建一个中央(这次不会让你失望,可以成功创建并且连接到周边的)





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值