2

当有来自 iOS 设备的任何传入/传出呼叫时,我想检测以下事件:

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

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

4

2 回答 2

1

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

AudioSessionInitialize(NULL, NULL, NULL, NULL);    
UInt32 propertySize, micConnected;
    AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &propertySize, &micConnected);
于 2012-11-28T07:14:22.287 回答
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];
    }
于 2013-01-10T05:44:50.397 回答