我希望自己的应用音频能够在后台运行,而我已经关注了this tutorial,但它无效。当我按下主页按钮时,我的应用程序音频仍然停止,我意识到它没有调用“applicationDidBecomeActive”或“applicationDidEnterBackground”(即使我已禁用“应用程序不在后台运行”设置,问题仍然存在)。过去一周我一直在处理这件事。
到目前为止,我已经完成了这个步骤:
- 添加了AVFoundation框架并声明了
#import <AVFoundation/AVFoundation.h>
- 在音频中设置AVAudioSession
NSString *audioName = [NSString stringWithFormat:@"audio%d", (nimages)];
NSString *soundPath =[[NSBundle mainBundle]pathForResource:audioName ofType:@"mp3"];
NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
NSError *error = nil;
AVAudioPlayer *audio = nil;
audio = [[AVAudioPlayer alloc]initWithContentsOfURL:soundURL error:&error];
audio.numberOfLoops = -1;
audio.volume = 0.9;
if (error) {
NSLog(@"%@", [error localizedDescription]);
NSLog(@"Unable to load file");
}else {
//Make sure the system follows our playback status
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
//Load the audio into memory
[audio prepareToPlay];
}
- 在plist中添加行
更新
我的应用是一个音频应用,即使进入后台,用户也可以播放我应用的特定音轨。有可能吗?
答案 0 :(得分:0)
我认为必须积极播放音频才能实现这一目标。如果您的应用程序“实际上不是音频应用程序”,您可以尝试将应用程序设置为VoIP;这不需要主动连接。它也不会阻止其他想要使用音频的应用程序。只需设置后台模式为“App提供IP语音服务”,然后它将在后台运行最多十分钟;你可以连接一个VoIP套接字并将内容推送到它,如果你想让它保持活跃或醒来。
答案 1 :(得分:0)
我建议您通过clicking here
阅读“Apple Human Interface”在允许应用程序在后台工作的情况有限,例如(音频,下载,更新等),您可以在我提供给您的链接中找到它。
答案 2 :(得分:0)
使用它将运行其正在运行的代码。
NSURL * url = [NSURL fileURLWithPath:[NSString stringWithFormat:@“%@ / notification.wav”,[[NSBundle mainBundle] resourcePath]]];
NSError *error;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
AudioSessionInitialize( NULL, NULL, NULL,NULL);
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 value = YES;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);
AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(value), &value);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
AudioSessionSetActive(true);
// self.appAudioPlayer=audioPlayer;
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
self.audioPlayerForPlay.delegate = self;
self.audioPlayerForPlay.numberOfLoops=-1;
[self.audioPlayerForPlay prepareToPlay];
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
self.audioPlayerForPlay = audioPlayer101;
[audioPlayer101 release];
[self.audioPlayerForPlay play];