我需要做一个能够判断我目前是否连接到经典蓝牙设备的应用程序(实际上,它将是蓝牙车载设备)。
我的第一步是告诉当前连接的经典蓝牙设备是什么。我不能使用CoreBluetooth因为它只适用于LE。我尝试使用外部附件框架。
这是代码(按钮启动方法):
- (IBAction)startMethodGetConnected:(id)sender {
NSLog(@"button taped");
// Get the number of accessories connected
NSUInteger NumberOfAccessoriesConnected = [[EAAccessoryManager sharedAccessoryManager].connectedAccessories count];
//Display the number
NSLog(@"number of accessories connected : %d", NumberOfAccessoriesConnected);
}
我已经尝试将iPhone连接到蓝牙键盘和蓝牙耳机。在这两种情况下,控制台都会显示该数字为0。
如何显示正确的数字?
答案 0 :(得分:1)
来自苹果文档:
“必须确保支持外部配件的应用程序 正确配置他们的Info.plist文件。具体来说,你必须 包含 UISupportedExternalAccessoryProtocols 键来声明 您的应用程序支持的特定硬件协议。更多 有关此框架的信息,请参阅外部附件编程 主题。“here
您需要使用MFi设备的协议在Info.plist文件中添加此密钥。
<key>UISupportedExternalAccessoryProtocols</key>
<array>
<string>your_protocol_name</string>
</array>
此致
答案 1 :(得分:1)
你做不到。你可以做的是检查播放路线。问题是你的汽车免提将成为HeadsetBT。这是我在我的应用程序中使用的代码。
// create and set up the audio session
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
[audioSession setDelegate:self];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
[audioSession setActive: YES error: nil];
// set up for bluetooth microphone input
UInt32 allowBluetoothInput = 1;
OSStatus stat = AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
sizeof (allowBluetoothInput),
&allowBluetoothInput
);
NSLog(@"status = %x", stat); // problem if this is not zero
// check the audio route
UInt32 size = sizeof(CFStringRef);
CFStringRef route;
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route);
NSLog(@"route = %@", route);
// if bluetooth headset connected, should be "HeadsetBT"
// if not connected, will be "ReceiverAndMicrophone"