【问题标题】:iPad shows bluetooth accessory connected, but EAAccessoryManager doesn't find it?iPad 显示蓝牙配件已连接,但 EAAccessoryManager 没有找到?
【发布时间】:2014-04-06 11:06:33
【问题描述】:

这让我发疯了......我之前运行良好,但不知道发生了什么变化。我正在通过蓝牙连接到专有的公司设备,它具有身份验证芯片,并且(正如我所说)之前一切都很好。

我的 iPad 和配件都显示它们已相互连接。然而,当我尝试在我的应用程序中与设备对话时,大多数 EAAccessoryManager 甚至都找不到它......但偶尔我可以连接。什么给了?

-(void)scanForDevice
{

NSArray *accList = [[EAAccessoryManager sharedAccessoryManager] connectedAccessories];

// This is ZERO every time...even though iPad and device both indicate connection.
DLog(@"accList count: %i", accList.count);

for (EAAccessory *accessory in accList)
{
    for (NSString* protocolString in accessory.protocolStrings) {
        if ([protocolString isEqualToString:[redacted]]) {
            [self connectToAccessory:accessory];
            break;
            }
        }
    }
}

ETA:我已经连接了一个按钮来调用 showBluetoothAccessoryPicker... 方法来在应用程序中显示一个蓝牙选择器。这导致了更多的混乱。 iPad 告诉我我已经连接(在设置中)的配件显示在选择器中。当我点击它时,控制台输出如下:

2014-04-01 16:48:00.324 Subview[3438:60b] BTM: attempting to connect to service 0x00000080 on device [redacted] 00:07:80:73:06:01
2014-04-01 16:48:02.497 Subview[3438:60b] BTM: connection to service 0x00000080 on device [redacted] 00:07:80:73:06:01 succeeded
2014-04-01 16:48:11.924 Subview[3438:60b] BTM: lost device [redacted] 00:07:80:73:06:01
2014-04-01 16:48:12.500 Subview[3438:60b] BTM: setting pairing disabled
2014-04-01 16:48:12.501 Subview[3438:60b] BTM: disabling device scanning
2014-04-01 16:48:12.509 Subview[3438:60b] <0x157d10770 JobListViewController.m:(255)> BTPicker failed with error: The operation couldn’t be completed. (EABluetoothAccessoryPickerErrorDomain error 1.) 

该错误代码在文​​档中显示为“未找到”。嗯...所以连接成功,然后它立即丢失,然后找不到,即使根据设置我一直在连接?我无法解释这一切。非常感谢有此框架经验的人的任何帮助。我几乎完全相信这要么是框架的问题,要么是配件本身的问题,要么是它们的某种组合。

【问题讨论】:

  • 它是否在Settings.app 中声明已连接?您是否尝试忘记它并重新配对?
  • 是的...iPad 显示它已连接到配件。附件显示它已连接到 iPad。 [[EAAccessoryManager sharedAccessoryManager] connectedAccessories] 返回一个大的零。忘记和重新配对有时有效,有时无效。现在我遇到了一个额外的错误,即附件在几秒钟后“断开连接”。我的结论是:蓝牙很糟糕,而且一直都是,而且我对此无能为力。甚至没有人使用这个框架也无济于事,因为带有 BTLE 的 Core Bluetooth 更优越且更容易......但我在这里不是一个选择。
  • @ReidBelton:你有没有解决这个问题??
  • @ReidBelton 如果您有解决方案,请发布。我也面临同样的问题。谢谢

标签: ios ipad bluetooth eaaccessory


【解决方案1】:

请参阅https://forums.developer.apple.com/thread/61646。出于安全原因,iOS 10 之后发生了一些变化。 否则,您可以使用具有早期操作系统版本的 iOS 设备来获取您的配件的协议字符串(“EAAccessory”类的属性“protocolStrings”),然后将协议字符串添加到关键“支持的外部配件协议”的 plist 中。

【讨论】:

  • 虽然 2 年前当我问这个问题时这不是我的问题,但这是正确的,也是偶然发现这个问题的人最可能的原因。另请注意,协议字符串现在区分大小写!
【解决方案2】:

您是否将附件的协议字符串添加到 Info.plist 的 Supported External Accessory protocols 中?文档说:

The picker displays only Bluetooth devices that include an iAP over Bluetooth unique ID in their extended inquiry response.

不幸的是,我不知道我的设备的协议字符串,所以我无法证明我的建议是否有效。但总比没有好。

【讨论】:

    【解决方案3】:

    您是否尝试过使用 CoreBluetooth 框架?虽然这仅适用于 BLE 设备。

    【讨论】:

    • 不幸的是,无法做到这一点,因为我试图与之交谈的专有设备设置为通过常规蓝牙使用 MFI(在 iOS 上使用 BLE 之前就开始了它的开发)。否则我肯定会使用 Core Bluetooth,因为它看起来更直接(且可靠)。不过谢谢...您仍然会获得支持,因为对于大多数其他人来说,使用 BLE/Core 蓝牙肯定更有意义:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2011-05-08
    • 2016-05-31
    • 2012-10-22
    相关资源
    最近更新 更多