2010-04-01 51 views
0

我想在我的應用程序中禁用某些時間段的iPhone自動睡眠。 使用[[UIApplication sharedApplication] setIdleTimerDisabled:YES],只要我不播放音樂,它可以正常工作。iPhone - 預防睡眠,同時在MPMusicPlayerController中使用applicationMusicPlayer

但是當我播放音樂時,空閒計時器似乎重新激活。

我試過NSTimer的每種技巧都是每隔10秒鐘發出一些無聲的聲音,但沒什麼作用。

歡迎對此做出任何建議或想法。

+0

我有同樣的問題。對我來說就像一個錯誤。 – NeilInglis 2010-04-12 22:42:13

回答

1

解決這個問題的方法是首先創建UIApplication的子類,重寫setIdleTimerDisabled方法並使其無效。然後,添加一些您自己的方法,您可以從應用程序調用而不是使用普通的setter。通過這樣做,您將忽略所有可能會改變閒置定時器的消息,而不必使用自定義方法調用。這裏是你如何做到這一點:

編輯使用自定義的UIApplication子類的main.m文件:

#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方法時,它不再執行任何操作。

+0

這種解決方法實際上有效嗎? iPod控制器將如何使用子類而不是UIApplication? – 2010-11-29 17:24:58

+0

@主觀-c它確實有效。我已經在商店中的一個應用程序中獲得它。我編輯了我的初始回覆,以更詳細地顯示如何使其工作。 – gdavis 2011-04-04 23:15:27