私がやろうとしていること
ペアリングが必要な Bluetooth LE デバイスにアプリを接続しようとしています。
現在の動作
デバイスと iPhone アプリケーションをペアリングしなくても問題ありません。問題なく、接続、再接続、および読み取り/書き込み特性を実行できます。
しかし、デバイスをペアリングする必要がある場合、ペアリングのポップアップ確認の直後に初めて特性を読み書きすることしかできません。次回、アプリを見つけて自分のデバイスに接続しますが、ペアリング情報を使用していないため (推測)、特性データを読み書きする権限がありません。
ついに...
運がなくてもウェブを検索するのに数時間を費やした後、ここに私の質問があります:
携帯電話に保存されているペアリング データを使用して、iPhone アプリからアプリを Bluetooth LE デバイスに接続するにはどうすればよいですか? 何か不足していますか?
ペアリングデータが電話機に接続デバイス用に存在する場合、それが自動的に使用されるため、IOS の問題ではない可能性はありますか?
Bluetooth LE と IOS の経験がある人はいますか?
2013年10月27日更新
ペアリングが存在する場合、特性が検出された直後にペアリング認証によって保護された特性を読み取ることができないことを発見しました(確認ポップアップはありません)。非保護特性も問題なし!正確な理由はわかりませんが、IOS アプリがデバイスから応答を受信しないという動作です。
したがって、最初の読み取りが後で行われる場合、問題は発生しません。これは、コメントでデータを読み取って特性を発見するために使用しているコードです。
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;
{
NSArray *characteristics = [service characteristics];
CBCharacteristic *characteristic;
if (peripheral != servicePeripheral) {
NSLog(@"Wrong Peripheral.\n");
return ;
}
if (service != batteryService) {
NSLog(@"Wrong Service.\n");
return ;
}
if (error != nil) {
NSLog(@"Error %@\n", error);
return ;
}
for (characteristic in characteristics) {
NSLog(@"discovered characteristic %@", [characteristic UUID]);
if ([[characteristic UUID] isEqual:[CBUUID UUIDWithString:kBatteryCharacteristicUUIDString]]) { // Bat
NSLog(@"Discovered Bat Characteristic");
batteryCharacteristic = [characteristic retain];
//--> generate problem when pairing exists between IOS app and device
//[peripheral readValueForCharacteristic:batteryCharacteristic];
}
}
}