源码暂不开源,需要aar欢迎在下方评论
蓝牙4.0 SDK用法
一、申请相关权限
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
二、初始化蓝牙
BluetoothUtil.setDEBUG(true);//是否打开日志
BluetoothUtil.init(this);//初始化
三、打开蓝牙
BluetoothUtil.openBluetooth(this);//打开蓝牙
四、创建蓝牙操作对象
//创建对象需要用到的参数
BluetoothOptions bluetoothOptions = new BluetoothOptions.Builder()
//是否使用缓存策略
.setCacheEnable("your key", true)
//是否过滤没有蓝牙名称的设备
.setFilterNullName(true)
//创建参数
.build();
//创建对象
bluetoothManager = FastBluetoothManager.getInstance();
//对象初始化
bluetoothManager.initBluetooth(bluetoothOptions);
//添加缓存策略对象,不添加时,自动默认一个缓存策略对象,SP保存数据
bluetoothManager.addDeviceCache(new DemoDeviceCache());
五、设置回调
bluetoothManager.setBluetoothCallback(new BluetoothCallback() {
@Override
public void connect(BluetoothDevice bluetoothDevice) {
super.connect(bluetoothDevice);
result.append("\n");
result.append("连接成功");
}
@Override
public void disconnect() {
super.disconnect();
result.append("\n");
result.append("连接断开");
}
@Override
public void deviceFound(BluetoothDevice bluetoothDevice) {
super.deviceFound(bluetoothDevice);
result.setText(bluetoothDevice.getName());
}
}
@Override
public void onStartServicesDiscovered() {
super.onStartServicesDiscovered();
List<BluetoothGattService> bluetoothServices = bluetoothManager.getBluetoothServices(null);
for (BluetoothGattService bluetoothService : bluetoothServices) {
result.append("\n");
result.append("\n");
result.append("===========服务=============");
result.append("\n");
String uuid = bluetoothService.getUuid().toString();
result.append(uuid);
result.append("\n");
result.append("===========服务下的特征值=============");
List<BluetoothGattCharacteristic> bluetoothCharacteristics = bluetoothManager.getBluetoothCharacteristic(uuid);
for (BluetoothGattCharacteristic bluetoothCharacteristic : bluetoothCharacteristics) {
result.append("\n");
result.append(bluetoothCharacteristic.getUuid().toString());
result.append("\n");
}
result.append("===========END=============");
result.append("\n");
result.append("\n");
}
}
@Override
public void onStartCharacteristicChanged(BluetoothDevice device, byte[] buff) {
super.onStartCharacteristicChanged(device, buff);
}
});
六、蓝牙断开(或销毁)
BluetoothUtil.closeBluetooth();//关闭蓝牙,必要时onDestroy中处理
bluetoothManager.destroy();//销毁并回收资源,必要时onDestroy中处理
七、蓝牙操作
/**
* 开始蓝牙扫描
*/
void startScanning();
/**
* 停止蓝牙扫描
*/
void stopScanning();
/**
* 连接设备
*
* @param bluetoothDevice
* @param isAutoConnected
*/
void startConnect(Context context, BluetoothDevice bluetoothDevice, boolean isAutoConnected);
/**
* 连接设备
*
* @param address
* @param isAutoConnected
*/
void startConnect(Context context, String address, boolean isAutoConnected);
/**
* 断开连接
*/
void disconnect();
/**
* 扫描服务以及特征值
*/
void discoverServicesAndCharacteristic();
/**
* 根据特征值类型发送通知指令
*
* @param ch
* @param enable
*/
void setNotificationForCharacteristic(BluetoothGattCharacteristic ch, boolean enable);
/**
* 将数据写入特征值
* 数据为byte数组
* 比如我发送7e 14
* byte[] = {0x7e,0x14}
* @param characteristic
* @param dataToWrite
*/
void writeDataToCharacteristic(BluetoothGattCharacteristic characteristic, byte[] dataToWrite);
/**
* 从特征值中读取数据
* @param characteristic
*/
void readDataFromCharacteristic(BluetoothGattCharacteristic characteristic);
/**
* 得到服务
*
* @param serviceUUID
* @return
*/
public List<BluetoothGattService> getBluetoothServices(String... serviceUUID);
/**
* 根据服务得到该服务下的特征值
*
* @param serviceUUID
* @param characteristics
* @return
*/
public List<BluetoothGattCharacteristic> getBluetoothCharacteristic(String serviceUUID, String... characteristics);
/**
* 销毁对象或者监听器回调
*/
@Override
void destroy();
八、蓝牙回调
/**
* 连接成功
*
* @param bluetoothDevice
*/
@Override
public void connect(BluetoothDevice bluetoothDevice) {
}
/**
* 连接失败
*/
@Override
public void disconnect() {
}
/**
* 发现设备
*
* @param bluetoothDevice
*/
@Override
public void deviceFound(BluetoothDevice bluetoothDevice) {
}
/**
* 开始扫描服务以及特征值
*/
@Override
public void onStartServicesDiscovered() {
}
/**
* 开始从特征值读数据
*
* @param buff
*/
@Override
public void onStartCharacteristicRead(byte[] buff) {
}
/**
* 开始从特征值写数据
*
* @param buff
*/
@Override
public void onStartCharacteristicWrite(byte[] buff) {
}
/**
* 特征值数据存在改变时(设备发数据)
*
* @param device
* @param buff
*/
@Override
public void onStartCharacteristicChanged(BluetoothDevice device, byte[] buff) {
}
九、注意事项
1. 蓝牙操作对象(FastBluetoothManager)在初始化完成时,立即开启扫描存在无法扫描情况,需要延迟扫描;</br>
2. 蓝牙权限与定位位置权限必须申请成功,不然无法使用蓝牙功能;</br>
3. 注意回收资源,防止内存泄露。</br>