【问题标题】:sound and Nstimer stopped when iphone is in deepsleepmode?当 iphone 处于深度睡眠模式时,声音和 Nstimer 停止了吗?
【发布时间】:2009-11-17 15:14:27
【问题描述】:

我正在创建一个应用程序,其中我使用 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];
}
}

【问题讨论】:

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


    【解决方案1】:

    为了防止应用在屏幕锁定时进入睡眠状态,您必须将音频会话设置为 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

    【讨论】:

    • 嗨,布莱恩。你会在哪里实现这个?这很奇怪。我的应用会在 4.3 中播放 BG,但在 5.0 中不会...
    • 现在不推荐使用上面的代码,而支持此解决方案:stackoverflow.com/a/18808124/467209
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多