【问题标题】:Checking earphones connected to device programmatically?检查以编程方式连接到设备的耳机?
【发布时间】:2010-12-15 09:43:10
【问题描述】:

我正在使用AVAudioPlayer 类在我的应用程序中播放 .mp3 文件。是否可以通过程序检查耳机是否连接到设备?

在第一代 iPod 设备中,当没有连接耳机时,音量控制栏是隐藏的(用于音乐和视频)。

【问题讨论】:

标签: iphone avaudioplayer


【解决方案1】:

AudioSessionGetPropertyAudioSessionAddPropertyListener 在 iOS 7 中已弃用。

改为使用:AVAudioSessionRouteChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:nil];

听众,

-(void)handleRouteChange:(NSNotification*)notification 
{
    NSInteger reason = [[[notification userInfo] objectForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
    switch (reason) {
        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable :
            break;
        case AVAudioSessionRouteChangeReasonNewDeviceAvailable :
            break;
        case AVAudioSessionRouteChangeReasonOverride :
            break;
        case AVAudioSessionRouteChangeReasonCategoryChange :
            break;
        case AVAudioSessionRouteChangeReasonWakeFromSleep :
            break;
        case AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory :
            break;
        case AVAudioSessionRouteChangeReasonRouteConfigurationChange :
            break;
        case AVAudioSessionRouteChangeReasonUnknown:
        default:
            break;
    }
}

【讨论】:

  • 有时,AVAudioSession 通知不会在主队列中调用。这样将您的方法包装在一个块中将避免相关问题(更新 UI ...):dispatch_async(dispatch_get_main_queue(), ^{ // Your method });
  • @nahung89 如果通知没有在主队列中调用,在主队列中使用块有什么好处?
  • @Fa.Shapouri 正如我在上面的评论中指出的,你应该仔细阅读。
【解决方案2】:

您可以通过使用kAudioSessionProperty_AudioRoute 属性调用AudioSessionGetProperty 来获取当前音频“路由”。 这会为您提供一个字符串,例如“耳机”或“扬声器”。

您也可以使用AudioSessionAddPropertyListener 来监听路线何时发生变化(例如断开耳机)

查看苹果文档here

【讨论】:

    【解决方案3】:

    有两种方法:

    1) 检查音频路由的瞬时状态

    Detect if headphones (not microphone) are plugged in to an iOS device

    这个答案为你提供了一个现成的方法来检测耳机是否插入。

    2) 监控路由变化事件,并在耳机和非耳机之间的路由变化时设置一个标志

    How to programmatically detect earpiece in iphone?

    (可能希望将第一个链接中的代码添加到此链接中,以实际确定耳机/非耳机状态是否已在路由更改回调中更改)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多