iOS15.1更新后无法连接蓝牙,选择设备报EABluetoothAccessoryPickerErrorDomain错误
问题原因说明
EABluetoothAccessoryPickerErrorDomain Code=1 官方定义为用户主动取消选择,但iOS 15+系统收紧了ExternalAccessory框架的权限校验逻辑,权限不足、配件协议未配置也会触发该错误。
可行解决方案
- 首先检查Info.plist权限配置,新增以下两项:
- 蓝牙权限声明:添加
NSBluetoothAlwaysUsageDescription键,值填写使用蓝牙的业务说明(如「需要蓝牙权限连接外部配件」) - 配件协议声明:添加
UISupportedExternalAccessoryProtocols数组类型键,在数组中填入你要连接的MFi认证蓝牙设备对应的通信协议字符串(协议信息可向设备厂商索取)
- 蓝牙权限声明:添加
- 调用蓝牙选择器前必须先主动申请蓝牙权限,不要直接唤起选择器,参考代码如下:
// 类扩展中声明CBCentralManager属性,避免局部变量被提前释放导致无回调 @property (nonatomic, strong) CBCentralManager *bluetoothManager; // 申请蓝牙权限 self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue() options:@{CBCentralManagerOptionShowPowerAlertKey: @(YES)}]; // 实现CBCentralManagerDelegate代理方法 - (void)centralManagerDidUpdateState:(CBCentralManager *)central { if (central.state == CBManagerStatePoweredOn) { // 蓝牙权限已授权、硬件可用,再唤起蓝牙选择器 [[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:nil completion:^(NSError *error) { if (error) { NSLog(@"error :%@", error); } else { // 原有连接成功后的业务逻辑 } }]; } else if (central.state == CBManagerStateUnauthorized) { // 此处可添加引导用户到系统设置开启蓝牙权限的逻辑 } } - 调试时建议先卸载设备上的原有APP再重新安装测试,避免缓存的权限状态导致校验异常。
- 确认你要连接的蓝牙设备为苹果MFi认证设备,ExternalAccessory框架仅支持MFi认证的蓝牙配件。
内容的提问来源于stack exchange,提问作者vishwa
相关产品推荐
相关产品推荐

