2015-09-25 191 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适配器重新开始。