【问题标题】:Connected Bluetooth Module not shown in EAAccessoryManager's connectedAccessoryEAAccessoryManager 的 connectedAccessory 中未显示已连接的蓝牙模块
【发布时间】:2013-06-17 19:50:16
【问题描述】:

我正在开发一个使用蓝牙 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

【问题讨论】:

    标签: ios objective-c eaaccessory


    【解决方案1】:

    您必须手动将 _protocolString 的值添加到应用的 info.plist(支持的外部附件协议部分)。

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2015-06-25
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2014-10-28
      相关资源
      最近更新 更多