idleTimerDisabled не работает с iPhone 3.0 - PullRequest
14 голосов
/ 29 июня 2009

Я использовал:

[UIApplication sharedApplication].idleTimerDisabled = YES;

в ряде приложений, разработанных и работающих под iPhone OS 2.x, и с ними никогда не было проблем. Это были приложения для часов, поэтому они должны были работать постоянно и игнорировать настройку таймера простоя iPhone.

Однако, пытаясь добиться того же с новым приложением, работающим под управлением ОС 3.0 (и которое необходимо развернуть под 3.0, поскольку оно использует некоторые API 3.0), я обнаружил, что таймер простоя либо игнорируется, либо несовместим.

Мое приложение воспроизводит музыку из библиотеки iPod, и при ее воспроизведении оно автоматически блокируется независимо от вышеуказанных настроек. Но как только вы его разблокируете, он не будет автоматически блокироваться снова, если вы не будете воспроизводить музыку снова, и в этом случае он снова блокируется после установки времени автоматической блокировки iPhone.

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

Просто чтобы уточнить:
1. Приведенный выше код находится в ApplicationDidFinishLaunching
2. Я знаю, что телефон не будет автоматически блокироваться при тестировании с xCode независимо от настроек

Если у кого-то есть мысли, я был бы очень признателен ...

Ответы [ 5 ]

16 голосов
/ 12 августа 2009

Наше приложение использует MPMediaPLayer. У нас также был код idleTimerDisabled=YES в ApplicationFinishedLaunching, который работает ИСКЛЮЧИТЬ, если он не подключен, и уже есть текущий nowPlayingItem, который остается воспроизведенным (или не приостановленным, если приостановлено при запуске приложения). Очевидно, это все с Settings -> General -> Autolock, установленным на какое-то временное значение.

Путем добавления idleTimerDisabled=NO, за которым сразу следует idleTimerDisabled=YES в одном из других фрагментов кода, ПОСЛЕ того, как мы выяснили, какую часть музыки мы получим, казалось, решили проблему. Просто установить его на YES было недостаточно .. и последующие запросы всегда указывали правильное значение (YES) .. поэтому кажется, что код Apple игнорирует установку значения, ЕСЛИ есть текущее музыкальное произведение, и это не изменяется вашим кодом ... но замечает изменение значения.

Это все под iOS 3.0 .

3 голосов
/ 25 марта 2015

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

Вот мое решение с использованием XCode 6.2.

iPhone - телефон переходит в спящий режим, даже если для idleTimerDisabled установлено значение ДА

По сути, даже сейчас, в 2015 году, единственный способ безопасно убедиться, что устройство не переходит в режим сна, - это повторно вызывать фрагмент кода, чтобы держать устройство в активном состоянии.

-(void)callEveryTwentySeconds
{
    //  DON'T let the device go to sleep during our sync
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
0 голосов
/ 26 августа 2011

Я разрабатываю Секунд - Интервальный таймер для iPhone и iPod touch , и у меня не было никаких проблем с этим. Идея моего приложения заключается в том, что люди создают таймеры на основе нескольких интервалов, где каждый интервал может иметь свой собственный список воспроизведения или трек.

В iOS3 у меня была проблема, что я не мог отключить таймер простоя, просто установив idleTimerDisabled = YES. В конце концов я придумал то же решение, что и Нил, и периодически устанавливал для него значение «НЕТ», а затем снова сразу «ДА». Казалось, это работает.

Я сейчас обновляю приложение до iOS4 (я знаю, iOS5 не за горами ...), и теперь у меня возникла противоположная проблема. Если MPMediaPlayer меняет дорожку до того, как таймер простоя достигнет своего предела, он сбрасывается. Я только что проверил это, создав интервал в моем приложении, который составлял 55 секунд, моя автоблокировка была установлена ​​на минуту. Через 50 секунд экран потускнел, поскольку он готовился к блокировке, но через 55 секунд, когда музыка изменилась, он вернулся к полной яркости и затем не блокировался, как должно.

В целом, реализация этого кажется в лучшем случае ненадежной.

0 голосов
/ 23 июля 2009

Имея ту же проблему. Он работает, когда устройство подключено. Вы можете нажать кнопку блокировки сверху, и мой NSTimer срабатывает позже и вызывает вибрацию. Однако, если устройство не подключено, нажатие кнопки блокировки переводит устройство в спящий режим. Любое решение будет с благодарностью.

  • iCodeblog опубликовал информацию о бездельнике, я сказал, что это не сработало, и человек, который разрабатывает «милые часы», был достаточно мил, чтобы ответить. Вы должны сделать хак, проигрывать 1 секунду или более тихий звук каждые 10 или около того секунд с NSTimer. Это сохраняет устройство активным, даже если пользователь нажимает кнопку блокировки.
0 голосов
/ 29 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...