8

好的,iOS6 到底是怎么回事,它如何处理蓝牙 LE 断开连接?之前设备会立即断开连接,但现在,出于某种奇怪的原因,设备等待断开连接大约 30-60 秒。我需要它来断开 ASAFP!

我一直在互联网上搜索,试图弄清楚如何立即断开与外围设备的连接,我发现这封漂亮的电子邮件解释了一种解决方法是取消订阅有关服务特性的通知。

现在我想我正在这样做..当我想断开连接时,我会打电话[connected_device setNotifyValue:NO forCharacteristic:connected_characteristic]

然后,在 didUpdateNotificationStateForCharacteristic 函数中,我有......

if((int)characteristic.isNotifying == 0){
   [manager cancelPeripheralConnection:peripheral];
}

在函数 didDisconnectPeripheral...

connected_peripheral = nil;
connected_characteristic = nil;
[connected_peripheral release];
[connected_characteristic release];

我还仔细研究了 Apple 的CoreBluetooth 温度传感器示例,但它并没有太大帮助....

对此的任何帮助都会很棒!我只是不知道我错过了什么......

更新:看起来应用程序需要连接到蓝牙设备至少一分钟才能允许断开连接。如果应用程序连接超过一分钟,它会在发送命令时立即断开连接。否则,它将等到那一分钟标记才真正断开连接。

更新:当我尝试在一分钟之前断开连接时,当设备实际断开连接时,我会在日志中获得以下输出。

Oct 24 16:49:35 Christophers-iPhone awdd[8168] <Error>: libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary
Oct 24 16:49:35 Christophers-iPhone awdd[8168] <Error>: CoreLocation: CLClient is deprecated. Will be obsolete soon.
4

2 回答 2

7

根据苹果的说法,这个新功能是“设计的”。我们解决此问题的方法是向外围设备发送命令并使其与末端断开连接。如果你这样做,那么断开是立即的。我不知道为什么 Apple 将这种行为从 iOS5 更改为 iOS6,但他们一定有他们的理由。当然,此解决方案仅在您可以访问外围固件并且可以更改它的情况下才有效。如果有不同的解决方案,那么我们还没有找到它。

于 2012-10-25T15:27:26.777 回答
0

这是 iOS 6.0 中的错误,在 6.1 中已修复。

于 2013-02-20T16:30:19.813 回答