1

Bluetooth 2.1 と通信する iOS アプリに取り組んでいます。アプリがアクティブになると、BT に接続します。アプリがバックグラウンドになり、再びアクティブになると正常に動作します。

しかし、私は問題に気づきました:

BT モジュールの電源をオフにすると、アプリは次のように通知を受け取ります。

  - (void)accessoryDidDisconnect:(EAAccessory *)accessory
    {
        NSLog(@"EAController::accessoryDidDisconnect:");
        _selectedAccessory = nil;
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Lost connection. " delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setBool:YES forKey:@"Lost Communication"];
        [self closeSession];
    }

次に、モジュールの電源を入れ直し、[設定] -> [Bluetooth] に移動し、BT モジュールを iPhone に接続し、アプリをアクティブにします (バックグラウンドから戻ってきます)、EASession を開始できません:

if (_session == nil)
    {
        NSLog(@"EAController::openSession");
        [_selectedAccessory setDelegate:self];
        _session = [[EASession alloc] initWithAccessory:[self selectedAccessory] forProtocol:_protocolString];

        if (_session)
        {
                    // Set up delegate........
        }
        else
        {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setBool:NO forKey:Unit_Has_Connection_UserDefault_Key];
            NSLog(@"creating session failed");
        }
    }

_accessoryList と _selectedAccessory を開始します。

_accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]];
_selectedAccessory = [_accessoryList objectAtIndex:0];

_accessoryList に使用しているアクセサリがあることがわかりましたが、「プロトコル」は空です。

$12 = 0x1dd58050 <__NSArrayI 0x1dd58050>(
<EAAccessory: 0x1dd1dce0> {
  connected:YES
  connectionID:XXX
  name: XXX
  manufacturer: XXX
  modelNumber: XXX
  serialNumber: 
  firmwareRevision: XXX
  hardwareRevision: XXX
  macAddress: XXX
  protocols: (
)
  delegate: (null)
}
)

アプリを強制終了して再起動すると、正常に動作します。

これを解決する方法を知っている人はいますか?

この質問はこれに似ていますが、さまざまな状況で発生し、その質問に対する答えは私の問題を解決していないようです.

4

4 に答える 4

1

また、バックグラウンドから戻るときに、特に 8 時間以上アイドル状態になった後、アクセサリに再接続する際に問題が発生しました。(ゴースト デバイスを提供できる EAAccessoryManager の代わりに) EAAccessoryDidConnectNotification/Disconnect のみに依存して作成すると、ほとんどの場合正常に動作するように見えます。

ただし、2 つのアプリがアクセサリを使用している場合、電話/パッドが起動すると不具合が発生する可能性があります。フォアグラウンドに移動する最初のアプリは、最終的に接続通知を受け取ります。ただし、2 番目のアプリでスワップすると、切断通知のみが受信され、接続は受信されません。ここでは、EAAccessoryManager を信頼できないため、アクセサリが接続されているかどうかを判断するのに非常に苦労しています。

于 2014-10-13T07:36:03.477 に答える
-1

iDevice とアクセサリ間の通信をサポートするには、アクセサリに MFI (Made for iPhone、ipAd、iPod touch) チップと共にプロトコルを定義する必要があると思います。ファームウェア チームと Apple MFI プログラムを確認する必要があります。プロトコルは、アプリケーション plist ファイルの「サポートされている外部アクセサリ プロトコル」フィールドに追加する必要があります。

于 2014-07-18T13:20:02.047 に答える