Bluetooth 2.1を使用するアプリに取り組んでいます。アプリがアクティブになるたびに、EASession が開きます。アプリがバックグラウンドまたは終了するたびに、EASession が閉じられました。
Bluetoothモジュールが接続されていて、アプリが新たに起動された場合、問題なく開き、データの送信/取得がすべて機能します。
ただし、アプリの実行中にBluetoothモジュールが通信を失った場合は、再接続してアプリをバックグラウンドから開いた後です。EASession のオープンに失敗します。
また、接続されているアクセサリがリストされていません。
- (EAアクセサリー *)選択したアクセサリー
{
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);
}
今回選んだアクセサリーは良さそうです。ただし、セッションを開始することはできません。
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