【问题标题】:didDiscoverPeripheral not been called after advertising another iOS devicedidDiscoverPeripheral 在广告另一台 iOS 设备后未被调用
【发布时间】:2014-12-06 20:55:56
【问题描述】:

基本上我有两个应用程序,一个用于扫描蓝牙设备,另一个用于广告,我想要做的是获取所有 iOS 设备的列表,在我附近的应用程序上扫描 iOS 设备.

这是我目前的代码:

Scanning.m:

// Scan for all available CoreBluetooth LE devices
    NSDictionary *scanOptions = @{CBCentralManagerScanOptionAllowDuplicatesKey:@(YES)};
    NSArray *services = @[[CBUUID UUIDWithString:@"1CC024D6-E413-4B56-993C-831CAF033366"]];

    [self.centralManager scanForPeripheralsWithServices:services options:scanOptions];

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    NSLog(@"RSSI: %d", [RSSI intValue]);

}

// method called whenever the device state changes.
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    // Determine the state of the peripheral
    if ([central state] == CBCentralManagerStatePoweredOff) {
        NSLog(@"CoreBluetooth BLE hardware is powered off");
    }
    else if ([central state] == CBCentralManagerStatePoweredOn) {
        NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
    }
    else if ([central state] == CBCentralManagerStateUnauthorized) {
        NSLog(@"CoreBluetooth BLE state is unauthorized");
    }
    else if ([central state] == CBCentralManagerStateUnknown) {
        NSLog(@"CoreBluetooth BLE state is unknown");
    }
    else if ([central state] == CBCentralManagerStateUnsupported) {
        NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform");
    }
}

Advertising.m:

    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    [self listenForRelays];


    /** Required protocol method.  A full app should take care of all the possible states,
 *  but we're just waiting for  to know when the CBPeripheralManager is ready
 */
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{

    if (peripheral.state == CBPeripheralManagerStatePoweredOn)
    {

        // We're in CBPeripheralManagerStatePoweredOn state...
        NSLog(@"self.peripheralManager powered on.");

        // ... so build our service.

    }
}


-(void) listenForRelays {

    if(self.peripheralManager.state == CBPeripheralManagerStatePoweredOn)
    {

        NSDictionary *advertisingData = @{CBAdvertisementDataLocalNameKey:@"my-peripheral",
                                          CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:@"1CC024D6-E413-4B56-993C-831CAF033322"]]};

        // Start advertising over BLE
        [self.peripheralManager startAdvertising:advertisingData];
    }

}

当我在不同的 iPhone 上运行不同的应用程序时,什么也没有发生!

这不会崩溃,但 didDiscoverPeripheral 永远不会被调用 :( 请帮帮我!是的,我已经阅读了文档,但仍然没有好处 :((

干杯

【问题讨论】:

  • 只有在您处于开机状态后才能开始扫描 - 在您的扫描应用程序中使用类似于广告应用程序中的代码
  • @Paulw11 OMGGGGG !!!非常感谢,你的天才!过去 3 个小时一直在这上面,救命!!!!

标签: ios objective-c cbcentralmanager cbperipheral


【解决方案1】:

在您处于开机状态之前,您无法启动扫描 - 在您的扫描应用中使用类似于广告应用中的代码。

在 iOS 7 中,在开机前开始扫描会在控制台上发出警告,但它仍然有效。在 iOS 8 中它不起作用。

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 2014-05-08
    • 2017-12-31
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2016-03-02
    • 2012-01-11
    • 2014-09-22
    相关资源
    最近更新 更多