BluetoothKit---Android 蓝牙框架






4.15/5 (5投票s)
一个允许轻松访问与 BluetoothLE 设备通信的库。
引言
这个库允许轻松访问蓝牙设备扫描和连接,支持自定义扫描策略,并解决了许多 Android 蓝牙固有的兼容性和稳定性问题,请参考 Android 4.3 Bluetooth Low Energy unstable
项目:https://github.com/dingjikerbo/BluetoothKit
要求
-
minSdkVersion 应该不低于 18
-
AndroidManifest.xml 中的权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true" />
用法
1、如果您使用 Gradle 构建,只需将以下行添加到您的 build.gradle
文件的 dependencies
部分
compile 'com.inuker.bluetooth:library:1.0.6'
2、像下面这样创建一个 BluetoothClient:
BluetoothClient mClient = new BluetoothClient(context);
扫描设备
这个库同时支持蓝牙 LE 设备扫描和经典设备扫描,您可以像下面这样自定义扫描策略
SearchRequest request = new SearchRequest.Builder() .searchBluetoothLeDevice(3000, 3) // scan Bluetooth LE device for 3000ms, 3 times .searchBluetoothClassicDevice(5000) // then scan Bluetooth Classic device for 5000ms, 1 time .searchBluetoothLeDevice(2000) // at last scan Bluetooth LE device for 2000ms .build(); mClient.search(request, new SearchResponse() { @Override public void onSearchStarted() { } @Override public void onDeviceFounded(SearchResult device) { } @Override public void onSearchStopped() { } @Override public void onSearchCanceled() { } });
您可以通过一行代码停止整个扫描
mClient.stopSearch();
蓝牙 LE 连接
● 连接
BleGattProfile 包含所有服务和特征 UUID。
mClient.connect(MAC, new BleConnectResponse() { @Override public void onResponse(int code, BleGattProfile profile) { if (code == REQUEST_SUCCESS) { } } });
● 连接状态
mClient.registerConnectStatusListener(MAC, mBleConnectStatusListener);
private final BleConnectStatusListener mBleConnectStatusListener = new BleConnectStatusListener() {
@Override
public void onConnectStatusChanged(int status) {
if (status == STATUS_CONNECTED) {
} else if (status == STATUS_DISCONNECTED) {
}
}
};
mClient.unregisterConnectStatusListener(MAC, mBleConnectStatusListener);
● 断开连接
mClient.disconnect(MAC);
● 读取特征
mClient.read(MAC, serviceUUID, characterUUID, new BleReadResponse() { @Override public void onResponse(int code, byte[] data) { if (code == REQUEST_SUCCESS) { } } });
● 写入特征
要写入的数据不应超过 20 字节。
mClient.write(MAC, serviceUUID, characterUUID, bytes, new BleWriteResponse() { @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } }); // with WRITE_TYPE_NO_RESPONSE mClient.writeNoRsp(MAC, serviceUUID, characterUUID, bytes, new BleWriteResponse() { @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } });
● 打开通知
mClient.notify(MAC, serviceUUID, characterUUID, new BleNotifyResponse() { @Override public void onNotify(UUID service, UUID character, byte[] value) { } @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } });
● 关闭通知
mClient.unnotify(MAC, serviceUUID, characterUUID, new BleUnnotifyResponse() { @Override public void onResponse(int code) { if (code == REQUEST_SUCCESS) { } } });
● 读取 RSSI
mClient.readRssi(MAC, new BleReadRssiResponse() { @Override public void onResponse(int code, Integer rssi) { if (code == REQUEST_SUCCESS) { } } });
● 刷新缓存
在下一次连接开始时刷新缓存。
mClient.refreshCache(MAC);