<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Need BLUETOOTH PRIVILEGED permission以及requestMtu導致藍牙斷連問題

      在部分Android手機上,當連接上GATTService后直接requestMtu有可能會造成藍牙連接中斷,隨后繼續重新連接會報錯Need BLUETOOTH PRIVILEGED permission

      1 //掃描成功后連接gatt
      2 BluetoothDevice mRemoteDevice = mBluetoothAdapter.getRemoteDevice(result.getDevice().getAddress());
      3 BluetoothGatt mBluetoothGatt = mRemoteDevice.connectGatt(getContext(), false, bluetoothGattCallback);

      在 BluetoothGattCallback 監聽的 onConnectionStateChange(BluetoothGatt gatt, int status, int newState)方法中直接requestMtu(512) 會直接導致藍牙斷開連接

       1 private int setMTUInt = 512;
       2 
       3 
       4 @Override
       5 public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
       6     super.onConnectionStateChange(gatt, status, newState);
       7 
       8     if (newState == BluetoothProfile.STATE_CONNECTED) { //// 連接成功
       9         //雖然這里的boolean會為true但是實際上會失敗,并且導致藍牙斷開鏈接
      10         boolean requestMtu = gatt.requestMtu(setMTUInt);
      11         Log.e(TAG,"設置 requestMtu:"+requestMtu);
      12 
      13     } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { // 連接斷開
      14         //清除緩存,防止Need BLUETOOTH PRIVILEGED permission
      15         refreshDeviceCache();
      16         //將MTU的值減少,值可以隨意設置
      17         setMTUInt -= 100;
      18         // 關閉GATT客戶端
      19         mBluetoothGatt.close();
      20     }
      21 }

      在監聽的onMtuChanged(BluetoothGatt gatt, int mtu, int status)方法中,確認mtu設置成功后,再去請求特征值

      1 @Override
      2 public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
      3     super.onMtuChanged(gatt, mtu, status);
      4             
      5     // 開始查找GATT服務器提供的服務
      6     gatt.discoverServices(); 
      7            
      8 }

      隨后在監聽的onServicesDiscovered(BluetoothGatt gatt, int status)方法中設置特征

      @Override
      public void onServicesDiscovered(BluetoothGatt gatt, int status) {
          super.onServicesDiscovered(gatt, status);
           if (status == BluetoothGatt.GATT_SUCCESS) {
              //設置特征值
              requestCharacteristic();
          } 
      }

       

      清除緩存的方法,gatt本身有提供清除緩存方法,但是不給外部直接調用,所以使用反射的方式進行調用,建議在每次開啟掃描設備時也清除一下緩存,防止鏈接過其他設備后直接鏈接新設備報錯 java.lang.SecurityException: Need BLUETOOTH PRIVILEGED permission: Neither user 10208 nor current process has android.permission.BLUETOOTH_PRIVILEGED.

       1 public boolean refreshDeviceCache() {
       2     if (mBluetoothGatt != null) {
       3         Log.e(TAG,"清除緩存 refreshDeviceCache");
       4         try {
       5             BluetoothGatt localBluetoothGatt = mBluetoothGatt;
       6             Method localMethod = localBluetoothGatt.getClass().getMethod(
       7                         "refresh", new Class[0]);
       8             if (localMethod != null) {
       9                 boolean bool = ((Boolean) localMethod.invoke(
      10                             localBluetoothGatt, new Object[0])).booleanValue();
      11                 return bool;
      12             }
      13         } catch (Exception localException) {
      14             Log.i(TAG, "An exception occured while refreshing device");
      15         }
      16     }
      17     return false;
      18 }

       

      posted @ 2024-10-12 10:18  王世楨  閱讀(646)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩一区在线中文字幕| 99久久亚洲综合精品成人| 欧洲美女黑人粗性暴交视频| 白嫩人妻精品一二三四区| 沂水县| 国产精品制服丝袜第一页| 琼结县| 亚洲第一极品精品无码久久| 亚洲AV永久无码嘿嘿嘿嘿| 手机看片日本在线观看视频| 国产成人拍国产亚洲精品| 一区二区三区av天堂| 激情国产一区二区三区四区| 少妇伦子伦精品无吗| 熟女精品国产一区二区三区 | 国产精品乱码久久久久久小说| AV喷水高潮喷水在线观看COM| 波多野结衣av无码| 国产国产乱老熟女视频网站97| 五月天丁香婷婷亚洲欧洲国产| 亚洲人成网站18禁止| 国产激情一区二区三区不卡| 久久精品国产99久久久古代| 亚洲欧美日韩在线码 | 国产午夜精品理论大片| 精品无码日韩国产不卡av| 久久亚洲精品中文字幕无| 亚洲中文字幕人妻系列| 久久国产精品成人影院| 色丁香一区二区黑人巨大| 中文字幕久久精品波多野结| 免费人成再在线观看视频| 国产精品爽爽v在线观看无码| 亚洲综合久久一区二区三区| 亚洲精品香蕉一区二区| 免费无码无遮挡裸体视频在线观看| 亚洲天堂一区二区三区三州| 亚洲Av综合日韩精品久久久| 人妻体内射精一区二区三四| 2019亚洲午夜无码天堂| 国产精品视频亚洲二区|