BluetoothKitAndroid 藍牙通信框架
BluetoothKit是一款功能強大的Android藍牙通信框架,支持經典藍牙和低功耗藍牙設備混合掃描,提供了一系列簡單易用的接口用于低功耗藍牙設備的連接,數據讀寫,通知等。
特點
一、統一解決Android藍牙通信過程中的兼容性問題
二、提供盡可能簡單易用的接口,屏蔽藍牙通信中的技術細節(jié),只開放連接,讀寫,通知等語義。
三、實現串行化任務隊列,統一處理藍牙通信中的失敗以及超時,支持可配置的容錯處理
四、統一管理連接句柄,避免句柄泄露
五、方便監(jiān)控各設備連接狀態(tài),在盡可能維持連接的情況下,將最不活躍的設備自動斷開。
六、便于多進程APP架構下藍牙連接的統一管理
七、支持攔截所有對藍牙原生接口的調用
技術
一、實現了一個完整的跨進程異步任務隊列,支持任務超時、出錯重試及防御隊列溢出
二、攔截并Hook系統層藍牙Binder,實現對所有藍牙設備通信的監(jiān)控,當同時連接設備數過多時會自動斷掉活躍度最低的設備
三、整個框架封裝在一個service中,可靈活指定service所在進程。通過client與service通信,client可源于多個不同進程,因此適用于多進程架構的app
四、屏蔽了接口異步回調可能持有調用端Activity引用導致的內存泄露
五、利用動態(tài)代理自動將所有操作封閉在工作線程,所以整個框架無鎖
使用
// 首先,需要按如下方式初始化BluetoothClient: BluetoothClient mClient = BluetoothClient.getInstance(context);
// 掃描設備:支持經典藍牙和BLE設備混合掃描,可自由定制掃描策略如下:
SearchRequest request = new SearchRequest.Builder()
.searchBluetoothLeDevice(3000, 3)
.searchBluetoothClassicDevice(5000)
.searchBluetoothLeDevice(2000)
.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();
// BLE設備連接
mClient.connect(MAC, new BleConnectResponse() {
@Override
public void onResponse(int code, Bundle data) {
if (code == REQUEST_SUCCESS) {
}
}
});
// BLE設備斷開連接 mClient.disconnect(MAC);
// 讀取BLE設備
mClient.read(MAC, serviceUUID, characterUUID, new BleReadResponse() {
@Override
public void onResponse(int code, byte[] data) {
if (code == REQUEST_SUCCESS) {
}
}
});
// 寫B(tài)LE設備
mClient.write(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) {
}
}
});評論
圖片
表情
