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

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

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

并且没有列出连接的附件。

  • (EAAccessory *)selected附件

  • {
     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计数]为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行之后,它输出错误:
    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.plist(受支持的外部附件协议部分)。

    10-08 06:07
    查看更多