IPhone - телефон идет спать, даже если idleTimerDisabled - ДА

Я использую это в своем приложении appdelegate applicationDidFinishLaunching: чтобы убедиться, что iPhone не заснул во время открытия приложения

[application setIdleTimerDisabled:YES];

Он отлично работает на всех экранах, но на одном из экранов iPhone отправляется спать. Я не мог понять, как воспроизвести это, и кажется, что это происходит в произвольные моменты времени.

Может кто-нибудь скажет мне, как справиться с этой ситуацией.

Спасибо

Ответы

Ответ 1

Я установил и отключил это свойство в своем приложении, используя:

[UIApplication sharedApplication].idleTimerDisabled = YES;

Устанавливая это, когда у вас возникают проблемы, можно исправить это, хотя это может быть немного решение для групповой помощи.

Ответ 2

К счастью, этот вопрос был опубликован 5 лет назад, и с тех пор Xcode совершил скачки и оценки прогресса.

Однако... эта ошибка все еще жива и пинается в 2015 году, используя Xcode 6.2 и iOS 8.2.

Здесь вам действительно нужно сделать, чтобы ваше устройство не спало.

(Возьмите пиво, это больно.)

Когда мое приложение было сначала запущено на устройстве, оно загрузило бы кучу данных из веб-службы. Однако, если потребовалось слишком много времени для запуска, экран исчезнет, ​​а затем выключится, устройство заблокируется, и мой веб-запрос завершится с уродливой ошибкой " Ошибка сетевого подключения".

Я попытался добавить код, чтобы просто установить/отключить значение idleTimerDisabled, но это изменение длилось недолго, и устройство все равно автоматически блокируется через некоторое время.

//  This didn't work for me  (for very long !)
[UIApplication sharedApplication].idleTimerDisabled = NO;
[UIApplication sharedApplication].idleTimerDisabled = YES;

Вместо этого мне нужно было сделать (депрессии вздох..) было установить таймер/отключить это значение каждые 20 секунд.

В моем файле .h:

@property (strong, nonatomic) NSTimer* stayAliveTimer;
-(void)callEveryTwentySeconds;

В моем .m файле:

-(void)callEveryTwentySeconds
{
    //  DON'T let the device go to sleep during our sync
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}

-(void)loadDataFromWebService
{
    self.stayAliveTimer = [NSTimer scheduledTimerWithTimeInterval:20.0
                                                           target:self
                                                         selector:@selector(callEveryTwentySeconds)
                                                         userInfo:nil
                                                          repeats:YES];

    //  
    //  Code to call our web service in a background thread and wait
    //  for it to finish (which might take a few minutes)
    //  

    //  Kill off our "Stay alive" timer, and allow the device to Auto Lock whenever it wants.
    [self.stayAliveTimer invalidate];

    //  Give our device permission to Auto-Lock when it wants to again.
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
}

Действительно, Apple?

Это 2015, и Xcode действительно все еще это плохо...?

Я надеюсь, что этот код поможет другим жертвам Xcode.

Ответ 3

попробуйте использовать

[UIApplication sharedApplication].idleTimerDisabled = NO;
[UIApplication sharedApplication].idleTimerDisabled = YES;

вместо

[UIApplication sharedApplication].idleTimerDisabled = YES;

забавный взлом, но он работает

см. также поток idleTimerDisabled не работает с iPhone 3.0

Ответ 4

Если ваше приложение использует камеру, приложение будет спать после использования камеры. Поэтому вам нужно добавить UIRequiredDeviceCapabilities в свой аппликатор. Различные устройства, которые вы можете добавить, как показано здесь

Ответ 5

Задайте это свойство в методе делегирования приложения +initialize, например:

+ (void) initialize {   
    if ([self class] == [MyAppDelegate class]) {
        UIApplication* myApp = [UIApplication sharedApplication];
        myApp.idleTimerDisabled = YES;
    }
}

Ответ 6

У меня была аналогичная проблема, и перезагрузка телефона исправила ее. Я не мог найти для нее программное исправление, поскольку даже таймеры, вызывающие функцию idleTimerDisabled с интервалом в одну секунду, также не исправляли ее.

Ответ 7

У меня была та же проблема. Мне нужно сделать экран тусклым, но когда выключите камеру, iphone заснет.

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
}

Затем я вызываю его после включения/выключения камеры, он работает.

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Ответ 8

Я думаю, что setIdleTimerDisabled не существует в классе UIApplication. Свойство ищет не только метод set, но и другие аналогичные методы.

Использовать точечный аксессуар - лучший способ решить вашу проблему.