objective-c - 当 iPhone 处于深度 sleep 模式时,声音和 Nstimer 停止了?

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

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

这是播放音频的代码

-(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];
}
}

最佳答案

为了防止应用在屏幕锁定时进入休眠状态,您必须将 Audio Session 设置为 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");
}

如果您不设置 Audio Session 类别,那么您的应用将休眠。

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

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

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

关于objective-c - 当 iPhone 处于深度 sleep 模式时,声音和 Nstimer 停止了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749550/

相关文章:

ios - 如何在 tableview iOS 中设置节标题而不重复数据?

ios - 如何关闭 ios 中自定义文本字段的键盘

iphone - 如何确定正在编辑 UITableView 中的哪个节标题

iphone - 为什么 Xcode 会在钥匙串(keychain)中自动安装(重复和过期的)证书?

ios - NSURL 和 iPhone SDK 3.0 调用电话的问题

objective-c - 如何在 cocoa 中创建和使用 bundle ?

xcode - 在Xcode中记录设置:Swift 2.0

objective-c - 升级到 Xcode 7.3 swift 2.2 后,从 swift 调用 obj-c 枚举不起作用

ios - 如何在 UISegmentedControl 中设置选定的段索引?

xcode - 如何在 NSBundle 中包含 zip 文件?