2015-09-25 194 views
0

顯然Android 5.0和更高版本已經搞亂了藍牙LE的使用,我需要爲它創建解決方法。
我注意到,連接到發現設備的時間很長。
但是,如果藍牙服務關閉然後打開,它通常會更快地連接。Android藍牙在關閉時關閉

我正在使用的應用程序需要在Android 4.3及更高版本上運行。
通常我只是推出BluetoothGatt.connect(),一切都很好。
但是在Android 5.0及更高版本中,Connect()會啓動,但在最終確定操作之前會保持很長時間。

考慮到這一點,我把一個Handler()。postDelayed()例程與10秒超時,以查看'看'如果連接已成功完成。
如果連接尚未完成我想以編程方式完全關閉手機的藍牙服務,然後再次打開它。

但是,當我試圖執行BluetoothAdapter.disable()該應用程序崩潰。
我只能猜測這是因爲BluetoothGatt.connect()活動仍在嘗試在後臺完成(通過BluetoothLEService)。

我可以手動關閉手機的藍牙服務,無論其「條件」,它的工作原理。
所以,我怎麼能編程關閉手機的藍牙服務,而一個連接()嘗試仍試圖執行 - 基本上關閉即時

您的建議/建議將不勝感激。
謝謝

回答

0

好了很多試用&錯誤我發現了一個似乎工作的序列。
我的處理程序()。postDelayed()我現在有下面的代碼

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     if (!mConnected && !paymentDone && myOSVersionNum >= 5.0) { 
      mBluetoothLeService.initialize(); 
      mBluetoothLeService.disconnect(); 
      BluetoothAdapter myBTadapter = BluetoothAdapter.getDefaultAdapter(); 
      myBTadapter.disable(); 
      while (myBTadapter.isEnabled()){ 
      // Wait Here Until DISABLED 
      } 
      // Now Turn Back ON & Re-Connect 
      myBTadapter.enable(); 
      mBluetoothLeService.connect(mDeviceAddress); 
     } 
     } 
    }, 6000); // 6 Seconds (6,000 Milliseconds) 

我相信其他人會發現我結束了該方法的問題,並希望批判它走向更美好方法。

儘管如此,我不知道這將是任何人的任何援助,但它好像我必須:
1.終止服務行動(初始化()&斷開() )
2.定義一個新的BT適配器(現有的原始定義不起作用)
3.利用新的BT適配器重新開始。