3

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
4

1 に答える 1

1

_protocolString の値をアプリの info.plist に手動で追加する必要があります (「サポートされている外部アクセサリ プロトコル」セクション)。

于 2013-07-25T11:55:15.050 に答える