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)
}
)
アプリを強制終了して再起動すると、正常に動作します。
これを解決する方法を知っている人はいますか?
この質問はこれに似ていますが、さまざまな状況で発生し、その質問に対する答えは私の問題を解決していないようです.