【发布时间】: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