<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          BluetoothKitAndroid 藍牙通信框架

          聯合創(chuàng)作 · 2023-09-25 02:52

          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) {
          
                  }
              }
          });
          瀏覽 29
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线无码视频蜜桃 | 欧美性爱综合 | 亚洲日本韩国一区二区在线 | 操逼视频网站免费观看 | 国产伦精品一区二区三区成人片 |