(iOS) 如何检查 iPhone 的配对蓝牙设备?

Posted

技术标签:

【中文标题】(iOS) 如何检查 iPhone 的配对蓝牙设备?【英文标题】:(iOS) How do I check an iPhone's paired Bluetooth devices? 【发布时间】:2013-06-18 07:03:55 【问题描述】:

我想使用 CoreBluetooth(因为我的应用必须符合 App Store 的条件)来检查所有当前已配对和连接的蓝牙设备。这应该不需要任何蓝牙扫描,对吧?我只是想看看系统与什么配对。如果我做不到,第二个选择是扫描。

我正在尝试的方法不起作用。它说蓝牙未通电并崩溃,但 CBCentralManager 的状态为开启!关于如何解决这个问题的任何想法,还是我完全偏离了轨道?

现在所有这些都在 ViewController 中:

    - (void)viewDidLoad

    [super viewDidLoad];
    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];

    [self.centralManager retrieveConnectedPeripherals]; //makes the system call didRetrieveConnectedPeripherals


- (void)centralManager:(CBCentralManager *)central didRetrieveConnectedPeripherals:(NSArray *)peripherals
    NSLog(@"didRetrieveConnectedPeripherals called");
    for (CBPeripheral *a in peripherals)
        NSLog(a.name); //just log the name for now to see if it recognized it
     //but it never ends up logging anything, and I have a BT keyboard paired/connected with the iPhone 5
 //and I get an error at some point, <CBConcreteCentralManager: 0x71ab020> is not powered on

- (void)centralManagerDidUpdateState:(CBCentralManager *)manager
    if ([manager state] == CBCentralManagerStatePoweredOff) NSLog(@"CBCentralManagerStatePoweredOff");
    if ([manager state] == CBCentralManagerStatePoweredOn) NSLog(@"CBCentralManagerStatePoweredOn"); //this is what gets logged when I run it on an iPhone 5
    if ([manager state] == CBCentralManagerStateResetting) NSLog(@"CBCentralManagerStateResetting");
    if ([manager state] == CBCentralManagerStateUnauthorized) NSLog(@"CBCentralManagerStateUnauthorized");
    if ([manager state] == CBCentralManagerStateUnknown) NSLog(@"CBCentralManagerStateUnknown");
    if ([manager state] == CBCentralManagerStateUnsupported) NSLog(@"CBCentralManagerStateUnsupported");

【问题讨论】:

【参考方案1】:

我也一直在做这件事,希望我学到的一些东西会有所帮助。

几件事:

1) 您可能会收到“蓝牙未开机”错误,因为您在初始化 CBCentralManager 后立即调用 [self.central retrieveConnectedPeripherals]。您需要给 CBCentralManager 足够的时间来连接蓝牙硬件。

试试这个,

- (void)viewDidLoad
    [super viewDidLoad];
    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

- (void)centralManagerDidUpdateState:(CBCentralManager *)manager 
   switch (manager.state) 
        case CBCentralManagerStatePoweredOn:
             NSLog(@"CBCentral Manager powered on");
             [self.centralManager retrieveConnectedPeripherals];
             break;
        case CBCentralManagerStatePoweredOff:
             ...etc.

另外,请注意 CBCentralManager 适用于具有蓝牙 4.0 的 ios 设备。目前,蓝牙 4 安装在 iPhone 4S/5、iPod 4 和 iPad 3/4/mini 上。因此,请注意您的应用无法在 iPad 1/2、iPhone 2/3 和 iPod 2/3 上运行。

仍在解决这个问题,但您也可能看不到您的键盘,因为它不是蓝牙 4 设备。让我知道你发现了什么。

【讨论】:

以上是关于(iOS) 如何检查 iPhone 的配对蓝牙设备?的主要内容,如果未能解决你的问题,请参考以下文章

将 iOS 应用重新连接到配对的蓝牙设备?

iOS:在我的应用程序中配对蓝牙外围设备,而不是使用设置

如何在 iPhone 上获取已配对的蓝牙耳机列表?

iOS PKPKT BLE 概念

IOS:如何检测配对蓝牙 3.0 设备的品牌/型号?

如何在 Cordova 应用程序中使用 iPhone 上的蓝牙?