连接的蓝牙模块未显示在EAAccessory管理器的已连接附件中



我正在开发一个使用蓝牙2.1的应用程序。每次应用程序激活时,它都会打开一个EASession。每次应用程序进入后台或终止时,EASession关闭。

如果蓝牙模块连接,并且应用程序是新启动的,它打开正常,发送/获取数据全部工作。

但如果蓝牙模块在应用程序运行时失去通信,在重新连接并从后台打开应用程序后。EASession打开失败

未列出连接的附件。

  • (EAAccessory *) selectedAccessory

{

 if (_selectedAccessory == nil)
 {
      _accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]];
      NSLog(@"accessory count: %d", [_accessoryList count]);
      if ([_accessoryList count])
      {
           _selectedAccessory = [_accessoryList objectAtIndex:0];
           NSArray *protocolStrings = [_selectedAccessory protocolStrings];
           self.protocolString = [protocolStrings objectAtIndex:0];
      }else{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"You don't have any machine connected.nPlease go to Settings->Bluetooth to set up connection." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];


    }
 }
 return _selectedAccessory;

}

此处[_accessoryList count]为0。

有人知道发生了什么事吗?谢谢!

编辑:

我做了更多的测试,这次看起来不一样。

- (BOOL)openSession
{
    if (_session == nil)
    {
        NSLog(@"EAController::openSession");
        [_selectedAccessory setDelegate:self];
        _session = [[EASession alloc] initWithAccessory:[self selectedAccessory] forProtocol:_protocolString];
        if (_session)
        {
            [[_session inputStream] setDelegate:self];
            [[_session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [[_session inputStream] open];
            [[_session outputStream] setDelegate:self];
            [[_session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [[_session outputStream] open];
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setBool:YES forKey:Unit_Has_Connection];
            NSLog(@"opened the session");
        }
        else
        {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setBool:NO forKey:Unit_Has_Connection];
            NSLog(@"creating session failed");
        }
    }
    return (_session != nil);
}

这次selectedAccessory看起来没问题。但是不能初始化会话。

在initWithAccessory行之后,它打印出ERROR:

2013-06-17 15:03:39.967 IceMachine[770:60b] ERROR - opening session failed
2013-06-17 15:03:39.968 IceMachine[770:60b] ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-237/EASession.m:-[EASession dealloc] - 139 unable to close session for _accessory=0x15543fe0 and sessionID=65536

你必须手动添加_protocolString的值到你的应用程序的info。

最新更新