7

我有一个音频应用程序,它使用媒体播放音频会话类别来允许背景音频。一旦我的音频会话被初始化,iOS 设备上的硬件音量按钮就会控制我的音频会话的音量。

一旦音频播放停止,我想将电话铃声的控制权返回给硬件音量按钮,但我尝试通过停用音频会话来做到这一点并没有成功。

以下是我初始化和激活音频会话的方式:

AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, 
                                audioRouteChangeListenerCallback, 
                                self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
                        sizeof(sessionCategory),           
                        &sessionCategory);

以下是我尝试停用音频会话并将 iOS 设备振铃器的控制权返回给硬件音量控制的方式:

AudioSessionSetActive(false);

据我所知,至少有一个应用程序会以这种方式运行(Audible.com 的 iOS 应用程序)。有谁知道我可能做错了什么?

4

2 回答 2

0

我刚遇到这个问题,但我正在使用 AVAudioPlayer。如果我试图在调用 play 后立即停用我的会话,它不起作用。但是等待 audioPlayerDidFinishPlaying:successfully: 然后这样做有效:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error;
BOOL wasSuccessful = [audioSession setActive:NO error:&error];
NSLog(@"wasSuccessful: %@", wasSuccessful ? @"Yes" : @"No");
}

我正在使用默认的音频会话,顺便说一句。

于 2013-08-31T07:39:36.943 回答
0

在苹果文档中,我认为您将不得不实际删除侦听器。

查找:AudioSessionRemovePropertyListenerWithUserData

http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html

于 2012-05-30T20:44:22.013 回答