如何在 iOS 通话期间检查音频是否路由到蓝牙免提

  • 本文关键字:路由 是否 音频 iOS ios bluetooth
  • 更新时间 :
  • 英文 :


我想在iOS设备有任何传入/传出呼叫时检测以下事件:

  1. 是否连接了任何蓝牙耳机设备。
  2. 音频是否路由到任何蓝牙耳机设备。

我是蓝牙配件编程的新手,有什么办法吗?

在下面的代码中,检查"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];
    }

最新更新