ios 7未弃用的解决方案,以恢复鸭子的背景音乐
我可以在播放新音色的同时播放背景音频。 但是我无法将背景音频水平恢复到最大值。 当我的代表试图“解开”时,它只是不断被遮住。 对此的正常修复是AudiosessionSetProperty,但在iOS 7中已弃用,Apple在弃用警告或文档中不提供任何提示。
我将这种方法称为视图负载。
- (void) configureAVAudioSession
{
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];
if (!success)
{
NSLog(@"AVAudioSession error :%@",error);
}
else
{
}
success = [session setActive:YES error:&error];
if (!success) {
NSLog(@"Error setting active %@",error);
}
else
{
NSLog(@"succes settings active");
}
}
这是当我播放音频
-(void)playTimeOnGo
{
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"just-like-magic"
ofType:@"mp3"]];
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:nil];
self.audioPlayer.delegate=(id<AVAudioPlayerDelegate>)self;
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error];
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
这是我的代表,当音频完成恢复背景音频和undock音频
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag{
[self configureAVAudioSession];
NSLog(@"playback ended");
}
那么如何在没有弃用的API的情况下再次展开背景音乐呢? 调用[self configureAVAudioSession];
显然不起作用....
女士们,先生们,我为您提供了一个未被弃用的工作示例,介绍如何正确使用iOS 7中的避难功能。
在你的任何“视图加载方法”调用这个方法,其中布尔被设置为YES。 这将混合背景音频并为其进行准备
- (void) configureAVAudioSession:(bool) active
{
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];
if (!success)
{
NSLog(@"AVAudioSession error :%@",error);
}
else
{
}
success = [session setActive:active error:&error];
if (!success) {
NSLog(@"Error setting active %@",error);
}
else
{
//NSLog(@"success settings active");
}
}
用这种方法播放音频文件。 观看如何发生ducking ..记得设置委托,因为我在这个例子中每次你播放一个新的音频提示。 不要在视图加载方法中设置一次。
-(void)playTimeOnGo
{
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
//alertName is the name of your audio file without extention. extenstions is, doh extenstion like "mp"
pathForResource:_dataManager.optionsSettings.setStarts.alertName
ofType:_dataManager.optionsSettings.setStarts.alertExtension]];
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:nil];
self.audioPlayer.delegate=(id<AVAudioPlayerDelegate>)self;
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error];
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
该代表将在播放后调用此方法并调高背景音乐的音量:)请不要感到困惑,因为我正在使用此线程。 如果你愿意的话,你可以调用这个方法,但是这会让主线程暂停一秒钟,甚至两秒钟。 所以这就好了,不要使用线程,只需调用[self configureAVAudioSession:NO];
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag
{
_playBackFinishedDelegateThead = [[NSThread alloc] initWithTarget:self selector:@selector(configureAVAudioSession:) object:NO];
[_playBackFinishedDelegateThead start];
}
这个例子经过100%测试并在我的应用程序中工作。
链接地址: http://www.djcxy.com/p/57451.html上一篇: ios 7 non deprecated solution to resuming background music from duck