2013-06-17 1 views
3

Я работаю над использованием приложения Bluetooth 2.1. Каждый раз, когда приложение становится активным, оно открывает EASession. Каждый раз, когда приложение переходит на задний план или заканчивается, EASession закрывается.Подключенный модуль Bluetooth не показан в подключенном приложении EAAccessoryManager

Если модуль bluetooth подключен, а приложение запущено свежим, оно открывается нормально, отправляйте/получайте все данные.

Но если bluetooth-модуль потеряет связь, когда приложение запущено, после его повторного подключения и приложения открывается из фона. Ошибка открытия 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 число] равно 0.

Кто-нибудь знает, что происходит? Спасибо!

EDIT:

я запустить несколько тестов, и на этот раз она выглядит по-другому.

- (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); 
} 

На этот раз выбраноПредложение кажется прекрасным. Но он не может инициировать сеанс.

После 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 

ответ

1

Вы должны добавить вручную значение _protocolString для info.plist вашего приложения (раздел Поддерживаемого внешних протоколов аксессуара).

Смежные вопросы