代码之家  ›  专栏  ›  技术社区  ›  shim

NSNotification(或类似功能),用于检测iOS上蓝牙连接的更改?

  •  0
  • shim  · 技术社区  · 11 年前

    当我的iOS应用程序打开时,它会显示本地蓝牙设备的列表,然后你点击其中一个。如果蓝牙关闭,系统会发出警报,要求您打开它(一个按钮进入“设置”,另一个按钮点击“确定”);如果你打开设置,它不会再次扫描,你必须

    当蓝牙打开时,如何注册一种运行方法的通知?

    我看到了一些关于“蓝牙可用性更改通知”的内容,但当蓝牙打开/关闭时,似乎不会调用它。

    这是我尝试过的代码:

    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(bluetoothAvailabilityChanged:)
     name:@"BluetoothAvailabilityChangedNotification"
     object:nil];
    

    ...

    -(void) bluetoothAvailabilityChanged: (NSNotification*) notification {
    NSLog(@"Bluetooth changed %@",notification.description);
    }
    
    3 回复  |  直到 11 年前
        1
  •  7
  •   Ben    9 年前

    要获得蓝牙状态更改指示,您可以尝试使用CoreBluetooth lib
    1.将CoreBluetooth.framework链接到您的项目
    2. #import <CoreBluetooth/CoreBluetooth.h> 在你的.h文件中
    3.实施 CBCentralManagerDelegate
    4.以self作为委托初始化管理器
    CBCentralManager *centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
    5.只要你需要更新,就把它作为一个财产:
    self.centralManager = centralManager;

    6.实施此方法:

    - (void)centralManagerDidUpdateState:(CBCentralManager *)central
    {
       if ([central state] == CBCentralManagerStatePoweredOff) {
           NSLog(@"Bluetooth off");
       }
       else if ([central state] == CBCentralManagerStatePoweredOn) {
           NSLog(@"Bluetooth on");
       }
    }
    

    现在尝试启用/禁用蓝牙并查看控制台以获取日志

        2
  •  0
  •   itsji10dra Anuj J    9 年前

    使生效 CBCentralManagerDelegate 协议这是监测蓝牙的唯一方法,

    enter image description here

        3
  •  -1
  •   Heliotropix    11 年前

    尝试: @"BluetoothConnectabilityChangedNotification"

    我继承了注册这些通知的代码:

    BluetoothAvailabilityChangedNotification
    BluetoothConnectabilityChangedNotification
    BluetoothPowerChangedNotification
    

    并且每个应用程序都会被调用。

    我不知道这些定义是从哪里来的。底层实现正在发布这些内容。