播放结束后,将音量控制返回到iOS设备振铃器

时间:2011-11-20 17:26:15

标签: ios hardware volume avplayer audiosession

我有一个音频应用程序,它使用媒体播放音频会话类别来允许背景音频。初始化音频会话后,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应用程序)。有没有人知道我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

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

查找:    AudioSessionRemovePropertyListenerWithUserData

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

答案 1 :(得分:0)

我刚遇到这个问题,但我正在使用AVAudioPlayer。如果我在调用play后立即尝试停用我的会话,则无法正常工作。但等待audioPlayerDidFinishPlaying:成功:然后这样做:

- (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");
}

我正在使用默认音频会话,BTW。