当有来自 iOS 设备的任何传入/传出呼叫时,我想检测以下事件:
- 是否连接了任何蓝牙耳机设备。
- 音频是否路由到任何蓝牙耳机设备。
我是蓝牙配件编程的新手,有什么办法吗?
在下面的代码中,检查“micConnected”的值以查看耳机是否已连接。
AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 propertySize, micConnected;
AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &propertySize, &micConnected);
我解决了它,如下所示:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err;
// close down our current session...
[audioSession setActive:NO error:nil];
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, &AudioSessionManager_audioRouteChangedListener, self);
void AudioSessionManager_audioRouteChangedListener (void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
{
NSLog(@"AudioSessionManager_audioRouteChangedListener");
MyAppDelegate *instance = (MyAppDelegate *)inClientData;
CFDictionaryRef routeChangeDictionary = inData;
// extract the route change reason...
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue (routeChangeDictionary, CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
SInt32 routeChangeReason = kAudioSessionRouteChangeReason_Unknown;
if (routeChangeReasonRef)
CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
// extract the old route..
CFStringRef newRoute;
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 5.0)
{
newRoute = CFDictionaryGetValue(routeChangeDictionary, @"OutputDeviceDidChange_NewRoute");
}
else
{
newRoute = CFDictionaryGetValue(routeChangeDictionary, @"OutputDeviceDidChange_NewRoute");
}
CFStringRef oldRoute;
oldRoute = CFDictionaryGetValue(routeChangeDictionary, @"OutputDeviceDidChange_OldRoute");
NSLog(@"newRouteString:%@ oldRoute:%@",newRoute,oldRoute);
[instance onAudioRouteChangedWithReason:routeChangeReason newRoute:(NSString *)newRoute oldRoute:(NSString *)oldRoute];
}