蓝牙ble 4.0 是android在4.3,即API 18引进来的。APP通过ble可实现发现设备,查询服务和数据读写的功能。具有更低功耗。
关键概念:
1.GATT(Generic Attribute Profile): GATT配置文件作为通用规范,用于在ble链路上发送和接收数据块。配置文件是设备如何在特定的应用程序中工作的规格说明。一个设备可以实现多个配置文件。
2.ATT(Attribute Protocol):每个属性通过一个唯一的统一标识符(UUID)来实现,每个String类型的UUID使用128 bitb标准格式。
3. Characteristic: 一个Characteristic包括一个单一的变量和N个用来描述Characteristic变量的descriptor。
4.Descriptor :用来描述Characteristic变量的属性。
5.Service:是Characteristic的集合。
具体实现:
1.实现BluetoothGattCallback回调:
private final BluetoothGattCallback mGattCallback=new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if(status == BluetoothGatt.GATT_SUCCESS) {
bleSetState(State.from(newState));
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if(status == BluetoothGatt.GATT_SUCCESS) {
}
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic) {
if(mCallback!=null) {
}
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic, intstatus) {
if(mCallback!=null) {
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic, intstatus) {
if(mCallback!=null) {
}
}
@Override
public void onDescriptorRead(BluetoothGatt gatt,BluetoothGattDescriptor descriptor, intstatus) {
if(mCallback!=null) {
}
}
@Override
public void onDescriptorWrite(BluetoothGatt gatt,BluetoothGattDescriptor descriptor, intstatus) {
if(mCallback!=null) {
}
}
};
2. 得到BluetoothAdapter:
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
3.得到BluetoothDevice:
BluetoothDevice device = adapter.getRemoteDevice(mac);
4.执行具体的连接,断开等操作
BluetoothGatt mBluetoothGatt = device.connectGatt(context, false, mCallback);
//disconnect
mBluetoothGatt.disconnect();
//close
mBluetoothGatt.close();
//获取BluetoothGattCharacteristic
BluetoothGattService gattService =mBluetoothGatt.getService(UUID_IR_SERVICE);
BluetoothGattCharacteristic characteristic = gattService.getCharacteristic(UUID_IR_CTRL);
5.数据之间的传输(重点)
int writeType = BluetoothGattCharacteristic.PROPERTY_WRITE;
characteristic.setWriteType(writeType);
characteristic.setValue(values); //value就是封装好的byte[]
mBluetoothGatt.writeCharacteristic(characteristic)
目前为止,一个最基本的蓝牙ble开发就差不多了。
回头再整理整理,希望能做个demo上传到github上。