IOS App不在后台运行
Posted
技术标签:
【中文标题】IOS App不在后台运行【英文标题】:IOS App does not run in background 【发布时间】:2013-09-05 16:26:52 【问题描述】:我希望我的应用程序音频在后台运行,我关注了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中添加行
更新:
我的应用程序是一个音频应用程序,即使它进入后台,用户也可以播放我的应用程序的特定配乐。有可能吗?
【问题讨论】:
【参考方案1】:我认为它必须主动播放音频才能正常工作。如果您的应用程序实际上不是音频应用程序,您可以尝试将应用程序设置为 VoIP;这不需要活动连接。它也不会阻止其他想要使用音频的应用程序。只需将后台模式设置为“应用程序提供IP语音服务”,然后它会在后台运行一次最多十分钟;如果你想让它保持活动状态或唤醒它,你可以连接一个 VoIP 套接字并将内容推送到它。
【讨论】:
我认为我的应用程序考虑了音频应用程序,因为用户可以在后台继续收听我的应用程序音频音乐。【参考方案2】:我建议你阅读clicking here的“Apple Human Interface”
在有限的情况下允许应用程序在后台运行,例如(音频、下载、更新..等),您可以在我提供给您的链接中找到所有内容。
【讨论】:
【参考方案3】:使用它可以运行它的代码。
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];
【讨论】:
我需要在哪里放置代码?介意给我解释一下?我对此有点模糊。谢谢你。 @Ankur以上是关于IOS App不在后台运行的主要内容,如果未能解决你的问题,请参考以下文章
即使应用程序不在后台运行,如何让 iOS 应用程序执行一些代码?