iPhone - 在MPMusicPlayerController中使用applicationMusicPlayer时防止睡眠

时间:2010-04-01 11:57:37

标签: iphone cocoa-touch avaudioplayer

我正在尝试在我的应用中禁用iPhone自动睡眠一段时间。 使用[[UIApplication sharedApplication] setIdleTimerDisabled:YES]只要我不播放音乐就可以正常工作。

但是当我播放音乐时,空闲计时器似乎重新激活。

我已经尝试过NSTimer每10秒钟发出一次静音的各种技巧,但没有任何效果。

欢迎任何关于实现这一目标的建议或想法。

1 个答案:

答案 0 :(得分:1)

解决此问题的方法是首先将UIApplication子类化,重写setIdleTimerDisabled方法并使其不执行任何操作。然后,添加一些您自己的方法,您将从您的应用程序调用,而不是使用普通的setter。通过执行此操作,您将忽略可能会更改空闲计时器的所有消息,而不是您自己创建的自定义方法调用。这是你如何做到的:

编辑main.m文件以使用自定义UIApplication子类:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSString* appClass = @"CustomUIApplicationSubclass";
    NSString* delegateClass = nil;
    int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);
    [pool release];
    return retVal;
}

然后定义您的UIApplication子类:

@interface CustomUIApplicationSubclass : UIApplication {

}

- (void)disableIdleTimer;
- (void)enableIdleTimer;

@end



@implementation CustomUIApplicationSubclass


- (void)setIdleTimerDisabled:(BOOL)disabled
{
    // do nothing! take that stupid ipod controller!
}


- (void)enableIdleTimer
{
    [super setIdleTimerDisabled:NO];
}


- (void)disableIdleTimer
{
    [super setIdleTimerDisabled:YES];
}


@end

这将迫使iPod控制器使用您的自定义UIApplication实例,当调用正常的setIdleTimerDisabled方法时,该实例不再执行任何操作。