当iphone处于深度睡眠模式时,声音和Nstimer停止了吗?

时间:2009-11-17 15:14:28

标签: objective-c xcode iphone-sdk-3.0 avaudioplayer nstimer

我正在创建一个应用程序,其中我使用nstimer和avaudioplayer来播放声音,但是当手机处于深度睡眠模式时,声音和计时器都会停止。如何解决这个问题?

这是播放音频的代码

-(void)PlayTickTickSound:(NSString*)SoundFileName
{
//Get the filename of the sound file:
NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],[NSString stringWithFormat:@"/%@",SoundFileName]];// @"/Tick.mp3"];
//Get a URL for the sound file
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
NSError *error;
if(self.TickPlayer==nil)
{
    self.TickPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:filePath error:&error];
    // handle errors here.
    self.TickPlayer.delegate=self;
    [self.TickPlayer setNumberOfLoops:-1];  // repeat forever
    [self.TickPlayer play];
}
else
{
    [self.TickPlayer play];
}
}

1 个答案:

答案 0 :(得分:4)

为了防止应用在屏幕锁定时进入休眠状态,您必须将音频会话设置为kAudioSessionCategory_MediaPlayback类型。

以下是一个例子:

UInt32 category = kAudioSessionCategory_MediaPlayback;
OSStatus result = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
                                        sizeof(category), &category);

if (result){
    DebugLog(@"ERROR SETTING AUDIO CATEGORY!\n");
}

result = AudioSessionSetActive(true);
if (result) {
    DebugLog(@"ERROR SETTING AUDIO SESSION ACTIVE!\n");
}

如果您未设置音频会话类别,那么您的应用将会休眠。

只有继续播放音频,这才会继续阻止应用程序进入睡眠状态。如果您停止播放音频并且屏幕仍处于锁定状态,则应用程序将进入休眠状态并暂停您的计时器。

如果您希望应用程序无限期保持清醒,则需要播放“静音”音频文件以使其保持清醒状态。

我在这里有一个代码示例:Preventing iPhone Sleep