if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mBluetoothGatt = device.connectGatt(this, false, mGattCallbacks, TRANSPORT_LE);
} else {
mBluetoothGatt = device.connectGatt(this, false, mGattCallbacks);
}
        这是连接蓝牙时的代码,然后我加了个定时器,设置了时间为3秒钟,如果3秒钟连接不上,则断开连接。调用了disconnect,在回调中调用close。只测试连接,不测试其他。设备的广播时间是300ms。        然后用了5部不同手机测试,小米5,小米6,红米2,三星SM-J3110,华为RIO-CL00,android版本从5.0-7.1都有了        只有小米5测试很顺畅,基本不会超时。        其他手机,有时3秒钟还连不上,连不上了之后,在点击连接,会出现133,再scanle就扫描不到该设备了,也就是说我定的时间到了,手机端被close了,但是设备还是处于连接状态。        求大神帮忙解决一下。这是什么原因造成的,该如何处理?

解决方案 »

  1.   

    3秒时间有点短,我设的是8秒,如果8秒无回调,执行下面这些
                Log.i(TAG, "连接超时.......");
                //断开本次连接,重新扫描
                connecttingGat.disconnect(); //
                connecttingGat.close();
    //            connecttingGat=null;
                setMyGatConnectStatus(connecttingGat,STATE_DISCONNECTED); //将当前的状态设置为STATE_DISCONNECTED
                scanLeDevice(true); //重新扫描,需要先停止扫描,2秒后再重新扫描
      

  2.   

    这个连接速度和手机的型号,android的版本都有关系,不同手机链接速度不一样,而且有些手机第一次还不一定能链接上!
      

  3.   


    我也改过8秒,10秒。但是都是一样的效果。基本上这个时间内如果没连上,接下来再连接,就很难连接上了,要等设备端自动断开才能再连接。你这个 setMyGatConnectStatus方法里面是怎么写的?