0

我們使用core_bluetooth.framework .Bluetooth設備一個藍牙devices.We有數據。我們需要獲取數據的藍牙設備我iPhone.We試過這樣didDiscoverServices和didDiscoverCharacteristicsForService永遠不會調用

-(void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { 
    NSLog(@"Discovered peripheral %@ (%@)",peripheral.name,peripheral.identifier.UUIDString); 
    if (![self.discoveredPeripherals containsObject:peripheral]) { 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.discoveredPeripherals addObject:peripheral]; 
      [self.tableview insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.discoveredPeripherals.count-1 inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     }); 
    } 
    [central connectPeripheral:peripheral options:nil]; 
} 
-(void) centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { 
    peripheral.delegate = self; 

    if(peripheral.services) 
     [self peripheral:peripheral didDiscoverServices:nil]; //already discovered services, DO NOT re-discover. Just pass along the peripheral. 
    else 
     [peripheral discoverServices:nil]; 

} 
-(void) peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { 
    for(CBService* svc in peripheral.services) 
    { NSLog(@" service %@",svc.description); 
     if(svc.characteristics) 
[self peripheral:peripheral didDiscoverCharacteristicsForService:svc error:nil]; 
     else 
[peripheral discoverCharacteristics:nil forService:svc]; 
} 
} 
-(void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error { 
    for (CBCharacteristic *characteristic in service.characteristics) { 
     NSLog(@"Discovered characteristic %@(%@)",characteristic.description,characteristic.UUID.UUIDString); 
     NSLog(@"Characteris is %@",[characteristic description]); 
    } 
} 

我們得到了設備名稱和設備UUID號碼。但我們的問題是,我們從來沒有打電話給didDiscoverServices和didDiscoverCharacteristicsForServices.I想打我的頭在我的顯示器上,我非常沮喪與這個問題。請指導我們。我的代碼有什麼問題

+0

在'centralManager:didConnectPeripheral:'中,你的if/else測試中哪行被調用? – Larme

+0

@Larme it call else line [peripheral discoverServices:nil];永遠的時間 –

+0

實現每個委託功能,並嘗試查看其餘的其中一個是否被調用。 – Aris

回答

0

我最近完成了藍牙功能基於VOIP的應用程序。 我爲此使用了corebluetooth框架。此外,我使用MPVolumeview(Airplay)在pickerview中以行動表的形式顯示可用的藍牙。 來到corebluetooth幀工作,首先#IMPORT corebluetooth框架,然後 爲Corebluetoothmanager和初始化呼叫之後創建實例,以下的委託方法

  • (無效)centralManagerDidUpdateState:(CBCentralManager *)中央{ }

除了這個委託方法外,沒有其他的委託方法在iOS 8.0以上調用。所以,在上面的委託方法中,你可以跟蹤iPhone/iPad藍牙是否激活。如果它處於活動狀態,請檢查audioroute藍牙或揚聲器或Microbuiltinphone。如果它的藍牙然後添加MPVolumeView到你的視圖來顯示藍牙圖標。

此外,隨着此,使用Audioroutechange通知跟蹤外部藍牙狀態開/關。據此可以知道外部藍牙設備的狀態。

我希望這個描述能幫助你很多。

相關問題