2013-04-22 250 views
2

我連接到藍牙系統http://redbearlab.com/blemini/iOS的藍牙BLE連接到空

從服務中讀取一些數據的設備,但節目服務,

我怎麼能看到可用的服務此設備, 我已經使用lightblue ios app進行檢查,我的設備有服務。

我可以連接到我的設備,並獲得名字,

但我的服務陣列將顯示爲空[檢查是不是null上面的應用程序]

這裏我的代碼

#import "MainViewController.h" 



@interface MainViewController() 

@property (nonatomic, retain)UILabel *deviceName; 
@property (nonatomic, retain)UILabel *deviceUUID; 
@property (nonatomic, retain)UILabel *deviceConnected; 


@end 

@implementation MainViewController 

- (void)dealloc 
{ 
    [_deviceName release]; 
    [_deviceUUID release]; 
    [_deviceConnected release]; 
    [super dealloc]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self initUI]; 

    self.view.backgroundColor = [UIColor lightGrayColor]; 
    NSLog(@"mgmt"); 

    self.manager = [[CBCentralManager alloc]initWithDelegate:self queue:nil]; 
} 



- (void)centralManagerDidUpdateState:(CBCentralManager *)central { 

    NSLog(@"centralManagerDidUpdateState"); 

    switch (central.state) { 
     case CBCentralManagerStatePoweredOn: 

      // Scans for any peripheral 
      [self.manager scanForPeripheralsWithServices:nil options:nil]; 

      break; 
     default: 
      NSLog(@"Central Manager did change state"); 
      break; 
    } 
} 

// device discovered 
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { 


    NSLog (@"Discovered peripheral: %@", [peripheral name]); 
    NSLog (@"UUID peripheral: %@", [peripheral UUID]); 

    NSLog (@"peripheral services: %@", [peripheral services]); 


    self.deviceName.text = [NSString stringWithFormat:@"Device Name: %@", [peripheral name]]; 
    self.deviceUUID.text = [NSString stringWithFormat:@"Device UUID: %@",[peripheral UUID]]; 

    [self.manager connectPeripheral:peripheral options:nil]; 
} 




//scan for peripherals 
- (int) scanForPeripherals { 

    NSLog(@"scanForPeripherals"); 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey, nil]; 
    [self.manager scanForPeripheralsWithServices:nil options:options]; 
    return 0; 
} 


- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { 
    NSLog(@"Central Manager didConnectPeripheral"); 


    self.deviceConnected.text = @"Device Connected: YES"; 

    NSLog (@"UUID services: %@", [peripheral services]); 


    // Clears the data that we may already have 
    [self.data setLength:0]; 
    // Sets the peripheral delegate 
    [self.activePeripheral setDelegate:self]; 
    // Asks the peripheral to discover the service 

//test! direct 
    CBUUID *serviceUUID = [CBUUID UUIDWithString:@"D298E274-3CB0-2C5F-A0B0-A90D97304453"]; 
    NSArray *serviceArray = [NSArray arrayWithObjects:serviceUUID, nil]; 

    [self.activePeripheral discoverServices:serviceArray]; 



} 



- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverServices:(NSError *)error { 

    NSLog(@"didDiscoverServices"); 


    if (error) { 
     NSLog(@"Error discovering service: %@", [error localizedDescription]); 
     //[self cleanup]; 
     return; 
    } 

} 

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error { 
    NSLog(@"didDiscoverCharacteristicsForService"); 

    if (error) { 
     NSLog(@"Error discovering characteristic: %@", [error localizedDescription]); 
     //[self cleanup]; 
     return; 
    } 

} 

// 
- (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { 

    NSLog(@"didUpdateNotificationStateForCharacteristic"); 

    if (error) { 
     NSLog(@"Error changing notification state: %@", error.localizedDescription); 
    } 


} 



- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

所以請諮詢爲什麼我的服務數組爲空? 以及如何訪問它以「閱讀」謝謝!

+2

嘗試:'[self.activePeripheral discoverServices:nil]'發現所有服務。 然後在'didDiscoverServices'中,NSLog將外圍服務。 其他可能性:在iDevice上重新啓動/關閉藍牙iDevice/Sensor Switch。有時我的應用不想發現服務。它只是卡住了。不知道爲什麼。 – Larme 2013-04-24 09:46:18

回答

1

您必須將您的屬性self.activePeripheral設置爲您在didDiscoverPeripheral中獲得的外圍設備。你的代碼正在爲一個無效的外設發現服務,這就是爲什麼你沒有得到服務。