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

时间:2012-11-28 07:09:34

标签: ios bluetooth

我想在iOS设备有来电/去电时检测以下事件:

  1. 是否连接了任何蓝牙耳机设备。
  2. 音频是否路由到任何蓝牙耳机设备。
  3. 我是蓝牙配件编程的新手,有什么方法可以做到吗?

2 个答案:

答案 0 :(得分:1)

在下面的代码中,检查“micConnected”的值以查看是否已连接耳机。

AudioSessionInitialize(NULL, NULL, NULL, NULL);    
UInt32 propertySize, micConnected;
    AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &propertySize, &micConnected);

答案 1 :(得分:1)

我解决了它,如下所示:

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];
    }