获取经典蓝牙连接设备列表(无BLE)[EAAccessoryManager]

时间:2016-02-19 01:31:26

标签: ios external-accessory ios-bluetooth

我需要做一个能够判断我目前是否连接到经典蓝牙设备的应用程序(实际上,它将是蓝牙车载设备)。

我的第一步是告诉当前连接的经典蓝牙设备是什么。我不能使用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。

如何显示正确的数字?

2 个答案:

答案 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"