【问题标题】:Observing AVAudioSession not firing notifications观察 AVAudioSession 不触发通知
【发布时间】:2017-11-30 10:54:10
【问题描述】:

在我目前正在构建的应用程序中,我需要根据[AVAudioSession sharedInstance] 的当前类别处理一些事情。此类别将在运行时发生变化,我正在尝试通过在 NotificationCenter 中观察 AVAudioSessionRouteChangeNotification 来跟踪变化。

但是,无论我尝试什么,都不会触发通知(或者至少我的选择器方法没有收到任何信息)。

一些测试示例代码;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sessionRouteDidChange:) name:AVAudioSessionRouteChangeNotification object:nil];
   return YES;
}
- (void)sessionRouteDidChange:(NSNotification *)notification
{
    NSLog(@"SESSION ROUTE CHANGED");
}

ViewController.m

- (void)changeAudioCategory:(AVAudioSessionCategory)category{
       [[AVAudioSession sharedInstance] setActive:NO error:nil];
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        NSError *setCategoryError = nil;
        BOOL success = [audioSession setCategory:category error:&setCategoryError];
        if (!success) {
            NSLog(@"ERROR");
        }
        [audioSession setActive:YES error:nil];

        /* Logging the current category */
        NSLog(@"AVAUDIOSESSION CATEGORY %@", audioSession.category);
}

我希望我在AppDelegate 中设置的观察者在更改此方法内的类别时向sessionRouteDidChange 发送通知,但没有任何反应。

我尝试过的;

  • 在多个 iOS 版本和 iPhone 型号上进行测试,但没有一个成功
  • 双重和三重检查,我没有在任何地方移除观察者

关于我缺少什么的任何想法?

【问题讨论】:

    标签: ios objective-c avfoundation avaudiosession


    【解决方案1】:

    更改类别不是路线更改,因此不会发布通知。你想要的是KVO observe category 属性。

    当您更改音频路由时会发生路由更改,例如插入耳机时。

    【讨论】:

    • 我明白了! AVAudioSessionRouteChangeReasonCategoryChange 让我完全相信我可以收到有关类别更改的通知。我不确定类别属性是否符合 KVO .. 我想我必须找到其他方法来解决这个问题 :) 非常感谢!
    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多