2010-04-01 4 views
0

내 앱에서 일정 기간 동안 자동으로 iPhone을 잠자기하지 못하게하려고합니다. 음악을 재생하는 동안 사용되는 [[UIApplication sharedApplication] setIdleTimerDisabled : YES] 사용됩니다.iPhone - MPMusicPlayerController에서 applicationMusicPlayer를 사용하는 동안 수면 방지하기

그러나 음악을 재생할 때 유휴 타이머가 다시 활성화 된 것 같습니다.

NSTimer에서 매 10 초마다 소리를 내며 모든 종류의 트릭을 시도했지만 아무런 효과가 없습니다.

이런 일이 일어나기를 바라는 제안이나 생각을 환영 할 것입니다.

+0

동일한 문제가 있습니다. 나 한테 버그 같아. – NeilInglis

답변

1

이 문제를 해결하는 방법은 먼저 UIApplication을 서브 클래스 화하고 setIdleTimerDisabled 메서드를 재정의하여 아무 것도하지 않게하는 것입니다. 그런 다음 일반 설정기를 사용하는 대신 응용 프로그램에서 호출 할 몇 가지 메서드를 추가하십시오. 이렇게하면 유휴 타이머를 변경할 수있는 모든 메시지는 사용자가 직접 지정한 사용자 지정 메서드 호출을 무시한 채 무시됩니다. 여기 당신이 그것을 할 방법 :

편집 사용자 정의 UIApplication 서브 클래스 사용하도록 main.m 파일 :

@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 

이에 아이팟 컨트롤러를 강제로 : 그런 다음 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; 
} 

을 일반적인 setIdleTimerDisabled 메서드가 호출 될 때 더 이상 아무것도 수행하지 않는 사용자 지정 UIApplication 인스턴스를 사용하십시오.

+0

이 해결 방법은 실제로 작동합니까? iPod 컨트롤러가 UIApplication 대신 하위 클래스를 어떻게 사용합니까? –

+0

@ subjective-c 작동하지 않습니다. 현재 상점에있는 앱에이 앱이 있습니다. 초기 응답을 편집하여 작동 방법을 자세히 보여줍니다. – gdavis

관련 문제