使用串行蓝牙连接设备时出现问题

我面临与常规蓝牙有关的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)连接build立后,我得到这个错误。

 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)" 

你可以看到日志的最后一行,显示错误。 当我search,发现苹果文档说错误意味着设备未find( EABluetoothAccessoryPickerResultNotFound ),但如何logging它显示其连接,如果没有find。

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

我已经添加了ExternalAccessory框架和设备是MFI兼容的。 帮我解决这些问题。 谢谢

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

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

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

编辑

 [[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 } } } 

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

这可能不适用于你,但没有太多的interwebs关于305错误,所以希望这至less可以帮助别人。

Interesting Posts