iOS 6 Corebluetoothとアラート通知サービスを使用しています。iOS Corebluetoothサービスは検出されませんでしたが、デリゲートメソッドのadvertisingDataに表示されます
デリゲートメソッドのadvertisingDataが正しいように見えますが、何らかの理由でサービスが周辺機器に表示されません。ここで
(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
bool ourGuy = NO;
NSLog(@"DATA: %@", advertisementData);
NSArray *keys = [advertisementData allKeys];
for (int i = 0; i < [keys count]; ++i) {
id key = [keys objectAtIndex: i];
NSString *keyName = (NSString *) key;
NSObject *value = [advertisementData objectForKey: key];
if ([value isKindOfClass: [NSArray class]]) {
printf(" key: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding]);
if ([keyName isEqualToString: @"kCBAdvDataServiceUUIDs"]){
NSArray *values = (NSArray *) value;
for (int j = 0; j < [values count]; ++j) {
if ([[values objectAtIndex: j] isKindOfClass: [CBUUID class]]) {
CBUUID *uuid = [values objectAtIndex: j];
NSString *uuidString = [uuid representativeString];
NSLog(@"FOUND SERVICE UUID %@", uuidString);
if ([uuidString isEqualToString:kalertNotificationServiceUUIDString]){
NSLog(@"Connecting");
if (![foundPeripherals containsObject:peripheral]) {
ourGuy = YES;
}
}
} else {
const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
printf(" value(%d): %s\n", j, valueString);
}
}
}
} else {
const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
printf(" key: %s, value: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding], valueString);
}
}
if (ourGuy){
[foundPeripherals addObject:peripheral];
peripheral.delegate = self;
[centralManager connectPeripheral:peripheral options:nil];
}
}
は、ログは次のようになります。:サービス発見のための
2013-08-25 23:30:17.417 myControl[688:907] DATA: {
kCBAdvDataLocalName = myTEST;
kCBAdvDataServiceUUIDs = (
"Unknown (<1811>)",
"Unknown (<180f>)"
);
}
key: kCBAdvDataServiceUUIDs
2013-08-25 23:30:17.419 myControl[688:907] FOUND SERVICE UUID 1811
2013-08-25 23:30:17.421 myControl[688:907] Connecting
2013-08-25 23:30:17.422 myControl[688:907] FOUND SERVICE UUID 180f
key: kCBAdvDataLocalName, value: myTEST
key: kCBAdvDataTxPowerLevel, value: -8
デリゲートメソッド:
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{
for (int i=0; i < peripheral.services.count; i++) {
CBService *s = [peripheral.services objectAtIndex:i];
NSLog(@" UUUID %@", [s.UUID representativeString]);
// [peripheral discoverCharacteristics:nil forService:s];
}
}
からログここで
は、デリゲートメソッドでありますその方法:
2013-08-25 23:30:18.266 myControl[688:907] UUUID 1800
2013-08-25 23:30:18.269 myControl[688:907] UUUID 1801
これらは、BLE GATTとGAPの2つのUUIDです。 advertisingDataに見られる周辺機器のサービスは決して表示されません。私は間違って何をしていますか?
ありがとう、実際に私は周辺機器を実装しています。didDiscoverServices:間違ったコードをコピーしました。私は質問を編集します。私はBLEUtilityとBLExplrを試して、戻ってきます。周辺機器は途中で非iOSデバイスです(問題がある場合)。 – Stpn
テストの結果を教えてください。周辺機器で 'discoverServices:'メソッドを呼び出すコードを追加してください。 – allprog
didDiscoverCharaceristiscの代わりに質問にコードを追加して、BLEunityをチェックしました。デバイスは実際には1つのサービスを宣伝しますが、最も基本的なものだけを提供します。私はそれがデバイスのCコードのダイビングを要求するだろうと思う? – Stpn