iPhone - Предотвращение сна во время использования applicationMusicPlayer в MPMusicPlayerController - PullRequest
0 голосов
/ 01 апреля 2010

Я пытаюсь отключить автоматическое отключение iPhone на определенный период времени в моем приложении. Использовал [[UIApplication sharedApplication] setIdleTimerDisabled: YES], который работает нормально, пока я не играю музыку.

Но когда я играю музыку, таймер простоя, похоже, снова активируется.

Я испробовал все виды трюков от NSTimer, запускающих тихие звуки каждые 10 секунд и т. Д., Но ничего не работает.

Приветствуются любые предложения или мысли по поводу этого.

1 Ответ

1 голос
/ 22 июня 2010

Способ исправить это - сначала создать подкласс UIApplication, переопределить метод setIdleTimerDisabled и заставить его ничего не делать. Затем добавьте пару своих собственных методов, которые вы будете вызывать из своего приложения, вместо использования обычного установщика. Делая это, вы будете игнорировать все сообщения, которые могут изменить таймер простоя, кроме пользовательских вызовов методов, которые вы делаете сами. Вот как вы это делаете:

Отредактируйте файл 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.

...