iphone - (iOS) 如何查看 iPhone 已配对的蓝牙设备?

标签 iphone ios bluetooth

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

我正在尝试的方法不起作用。说蓝牙没开机死机,但是CBCentralManager的状态是on!关于如何解决这个问题的任何想法,或者我是否完全偏离了轨道?

现在所有这些都在 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) 您可能会收到“蓝牙未开机”错误,因为您在初始化 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 设备。目前,iPhone 4S/5、iPod 4 和 iPad 3/4/mini 上安装了蓝牙 4。因此,请注意您的应用程序无法在 iPad 1/2、iPhone 2/3 和 iPod 2/3 上运行。

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

关于iphone - (iOS) 如何查看 iPhone 已配对的蓝牙设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162518/

相关文章:

ios - 通过蓝牙进行多点连接?

ios - 获取ios7中的Twitter关注者并关注

iphone - 将文件下载到 iPhone 中的文件夹

iphone - self.interfaceOrientation 导致在 iOS 4.x 上调用 shouldAutorotateToInterfaceOrientation

ios - SPPlaylist.m 中出现 CocoaLibSpotify 错误

ios - 尝试在 EKEventStore 中保存事件会使应用程序崩溃

ios - 如何将 iOS 与 BLE 和以前版本的蓝牙连接

android - 带有 2.3.6 的 galaxy note 上的蓝牙 SPP

iphone - iPhone 应用程序中的 Google map 导航和方向

iphone - cocos2d : playing a video in the background of a menu