我试图在我的应用程序中禁用 iPhone 的自动睡眠一段时间。使用 [[UIApplication sharedApplication] setIdleTimerDisabled:YES] 只要我不播放音乐就可以正常工作。
但是当我播放音乐时,空闲计时器似乎被重新激活。
我尝试了 NSTimer 每 10 秒发出无声的声音等各种技巧,但没有任何效果。
欢迎任何关于实现这一目标的建议或想法。
我试图在我的应用程序中禁用 iPhone 的自动睡眠一段时间。使用 [[UIApplication sharedApplication] setIdleTimerDisabled:YES] 只要我不播放音乐就可以正常工作。
但是当我播放音乐时,空闲计时器似乎被重新激活。
我尝试了 NSTimer 每 10 秒发出无声的声音等各种技巧,但没有任何效果。
欢迎任何关于实现这一目标的建议或想法。
解决这个问题的方法是首先继承 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 方法时,该实例不再执行任何操作。