【问题标题】:Getting Issues while connecting device with serial Bluetooth使用串行蓝牙连接设备时出现问题
【发布时间】:2016-01-28 01:19:48
【问题描述】:

我面临 2 个与常规蓝牙相关的问题。这是我的代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    [NSTimer scheduledTimerWithTimeInterval:3.0 target:self    selector:@selector(showElements) userInfo:nil repeats:NO]; 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(accessoryConnected:) name:EAAccessoryDidConnectNotification object:nil];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(accessoryDisconnected:) name:EAAccessoryDidConnectNotification object:nil];    
    [[EAAccessoryManager sharedAccessoryManager]registerForLocalNotifications];
}

-(void)showElements{
    [[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:nil completion:^(NSError *error) {
        if (error) {
            NSLog(@"error :%@", error);
        }
        else{
            NSLog(@"Its Working");
        }
    }];    
}

- (void)accessoryConnected:(NSNotification *)notification
{    
    EAAccessory *connectedAccessory = [[notification userInfo] objectForKey:EAAccessoryKey];

}

1) 建立连接后出现此错误。

error :Error Domain=EABluetoothAccessoryPickerErrorDomain Code=1 "(null)"

这是完整的日志:-

BTM: attaching to BTServer
BTM: setting pairing enabled
BTM: found device "ESGAA0010" 00:04:3E:95:BF:82
BTM: disabling device scanning
BTM: connecting to device "ESGAA0010" 00:04:3E:95:BF:82
BTM: attempting to connect to service 0x00000080 on device "ESGAA0010" 00:04:3E:95:BF:82
BTM: connection to service 0x00000080 on device "ESGAA0010" 00:04:3E:95:BF:82 succeeded
BTM: setting pairing disabled
error :Error Domain=EABluetoothAccessoryPickerErrorDomain Code=1 "(null)"

你可以看到日志的最后一行,它显示错误。当我搜索并发现苹果文档说错误意味着设备未找到(EABluetoothAccessoryPickerResultNotFound),但是如果未找到它,它如何在日志中显示它已连接。

2) accessoryConnected: 方法没有被调用。它很可能是因为第一个问题。但我认为这里值得一提。

我添加了 ExternalAccessory 框架,并且设备符合 MFI。 帮我解决这些问题。谢谢

【问题讨论】:

  • 如果您尝试使用EAAccessorySelectedKey 而不是EAAccessoryKey。不知道什么应该是正确的键,根据文档,一个是显示选择器连接时。此外,您得到的错误输出是在EAAccessory *connectedAccessory 行之前或之后?
  • @Larme 感谢您的回复,但方法本身没有被调用..那么这似乎不是问题。
  • 在什么设备上测试过?什么是iOS版本?
  • 我正在 iPhone 6 和 iPhone 5 上分别测试 iOS 9.1 和 iOS 8.4。
  • @Shivaay 我收到此错误错误:Error Domain=EABluetoothAccessoryPickerErrorDomain Code=2 "(null)"

标签: ios objective-c external-accessory mfi


【解决方案1】:

我今天遇到了同样的问题。解决方案很简单,您需要在 .plist 文件中添加额外的行。

<key>UISupportedExternalAccessoryProtocols</key>
<array>
    <string>YOUR_DEVICE_PROTOCOL</string>
</array>

如果设备被添加到MFi Program,它应该有自己的协议。检查您的设备文档或询问设备创建者。

编辑

[[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:nil completion:^(NSError *error) {
    if (error) {
        NSLog(@"error :%@", error);
    }
    else{
        NSLog(@"Its Working");
    }
}]; 

错误是EABluetoothAccessoryPickerError 的实例。有一个可能性值:

public enum Code : Int {
    public typealias _ErrorType = EABluetoothAccessoryPickerError

    case alreadyConnected
    case resultNotFound
    case resultCancelled
    case resultFailed
}

您的错误代码是 1 所以resultNotFound。请注意,当您修复 .plist 文件 showBluetoothAccessoryPickerWithNameFilter 时,有时会返回错误代码 = 0。然后没有错误,因为您的设备是 case alreadyConnected。我添加此信息是因为我在检测到此之前浪费了很多时间。 :)

祝你好运。

编辑 (Swift 3.0)

EAAccessoryManager.shared().showBluetoothAccessoryPicker(withNameFilter: nil) { (error) in
    if let error = error {
        switch error {
        case EABluetoothAccessoryPickerError.alreadyConnected:
            break
        default:
            break
        }
    }
}

【讨论】:

  • 我想知道你在 Swift 3.0 中有这个吗? .我正在努力在 UIAlertView 中向用户显示此错误,您如何称呼此案?案例不应该有 int 0 到 3 吗?
  • 我用带有错误处理的 Swift 3.0 版本更新了我的答案。
  • UIAlert​View 自 iOS 9 起已被弃用,请改用 UIAlertController
  • 感谢大家的帮助。
【解决方案2】:

尝试进入 iOS 蓝牙设置并取消设备配对并再次配对。我之前遇到过这个“305”错误,问题是我已经配对了设备,然后更新了设备的固件。之后它不会再次连接,直到我从我的 iPhone 中移除设备,然后在设备固件更新后重新配对

这可能对您不起作用,但互联网上关于 305 错误的信息并不多,因此希望这至少可以帮助某人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多