我正在开发一个与蓝牙 2.1 通信的 iOS 应用程序。应用程序在激活时连接到 BT。如果应用程序进入后台并再次激活,它工作正常。
但我刚刚注意到一个问题:
如果我关闭 BT 模块电源,应用程序会收到通知,我执行以下操作:
- (void)accessoryDidDisconnect:(EAAccessory *)accessory
{
NSLog(@"EAController::accessoryDidDisconnect:");
_selectedAccessory = nil;
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Lost connection. " delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"Lost Communication"];
[self closeSession];
}
然后我重新打开模块电源,进入设置 -> 蓝牙,将 BT 模块连接到 iPhone,活动应用程序(从后台返回),无法启动 EASession:
if (_session == nil)
{
NSLog(@"EAController::openSession");
[_selectedAccessory setDelegate:self];
_session = [[EASession alloc] initWithAccessory:[self selectedAccessory] forProtocol:_protocolString];
if (_session)
{
// Set up delegate........
}
else
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:NO forKey:Unit_Has_Connection_UserDefault_Key];
NSLog(@"creating session failed");
}
}
启动 _accessoryList 和 _selectedAccessory:
_accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]];
_selectedAccessory = [_accessoryList objectAtIndex:0];
我发现 _accessoryList 有我正在使用的附件,但它的“协议”是空的。
$12 = 0x1dd58050 <__NSArrayI 0x1dd58050>(
<EAAccessory: 0x1dd1dce0> {
connected:YES
connectionID:XXX
name: XXX
manufacturer: XXX
modelNumber: XXX
serialNumber:
firmwareRevision: XXX
hardwareRevision: XXX
macAddress: XXX
protocols: (
)
delegate: (null)
}
)
如果我杀死应用程序并重新启动,它工作正常。
有谁知道如何解决这个问题?
这个问题与这个问题类似,但发生在不同的情况下,并且该问题的答案似乎无法解决我的问题。