IdleTimerDisabled не работает с iPhone 3.0
Я использовал:
[UIApplication sharedApplication].idleTimerDisabled = YES;
в ряде приложений, разработанных и запущенных под iPhone OS 2.x, и никогда не возникало проблем с ним. Это часовые приложения, которые необходимо постоянно запускать и игнорировать настройку таймера iPhone бездействия.
Однако, пытаясь добиться этого же с новым приложением под управлением ОС 3.0 (и которое необходимо развернуть под 3.0, поскольку оно использует некоторые API 3.0), я обнаружил, что таймер бездействия либо игнорируется, либо несовместим.
My App воспроизводит музыку из библиотеки iPod, и когда музыка воспроизводит ее, она автоматически блокируется независимо от вышеуказанной настройки. Но как только вы разблокируете его, он не будет автоматически блокироваться, если вы снова не начнете воспроизведение музыки, и в этом случае он снова блокируется после настройки времени автоматической блокировки iPhone.
Я удивляюсь, что никто не сталкивался с этим, поскольку я предполагаю, что это повлияет на большое количество приложений.
Просто уточнить:
1. Вышеприведенный код находится в ApplicationDidFinishLaunching
2. Я знаю, что телефон не будет автоматически блокироваться при тестировании с xCode независимо от настроек
Если у кого-то есть мысли, я был бы очень благодарен...
Ответы
Ответ 1
В нашем приложении используется MPMediaPLayer
. У нас также был код idleTimerDisabled=YES
в ApplicationFinishedLaunching
, который работает EXCEPT, если он не привязан, и уже есть текущий nowPlayingItem
, который остается в игре (или отключен, если приостановлен при запуске приложения). Очевидно, что это все с Settings -> General -> Autolock
, установленным на некоторое временное значение.
Добавив idleTimerDisabled=NO
, сразу после этого следует idleTimerDisabled=YES
в одном из других битов кода ПОСЛЕ того, как мы выяснили, какой бит музыки мы будем играть, казалось, решили проблему. Просто установить его на YES
было недостаточно.., и в последующих запросах всегда указывалось правильное значение (YES
).. поэтому появляется код Apple, игнорирующий настройку значения IF, если есть текущая музыка, и это не измененный вашим кодом.. но замечает изменение значения.
Это все под iOS 3.0.
Ответ 2
Даже в 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];
}
Ответ 3
Звучит как ошибка, файл с помощью Radar - я не слишком удивлен, что этого не было видно, поскольку, вероятно, не так много приложений, которые пытаются заблокировать открытую экранную игру и.
Ответ 4
Имеет ту же самую проблему. Он работает, когда устройство подключено. Вы можете нажать кнопку блокировки сверху, а мой NSTimer срабатывает позже и вызывает вибрацию. Однако, если устройство не подключено к нажатию кнопки блокировки, устройство отключается. Любое решение было бы весьма полезно.
- iCodeblog опубликовал про idletimer, я сказал, что это не сработало, и человек, который разрабатывает "симпатичные часы", был достаточно хорош, чтобы ответить. Вы должны сделать взломать, воспроизводить 1 секунду или более тихий звук каждые 10 или около того секунд с помощью NSTimer. Это предотвращает пробуждение устройства, даже если пользователь нажимает кнопку блокировки.
Ответ 5
Я разрабатываю Секунды - Таймер интервала для iPhone и iPod touch, и у меня не было никаких проблем с этим. Идея моего приложения заключается в том, что люди создают таймеры на основе нескольких интервалов, где каждый интервал может иметь собственный плейлист или трек.
В iOS3 у меня возникла проблема с тем, что я не мог отключить таймер простоя, просто установив idleTimerDisabled = YES. В конце концов я придумал то же самое решение, что и Нейл, в котором я периодически устанавливал его в НЕТ, а затем снова на ДА. Казалось, это сработало.
Теперь я обновляю приложение до iOS4 (я знаю, iOS5 не за горами...), и теперь у меня есть противоположная проблема. Если MPMediaPlayer изменяет дорожку до того, как таймер простоя достигнет предела, он получит reset. Я только что проверил это, создав интервал в моем приложении, который составлял 55 секунд, мой автоблокировка была установлена на минуту. Через 50 секунд экран погас, когда он был готов к блокировке, но через 55 секунд, когда музыка изменилась, он вернулся к полной яркости, а затем не заблокировал, как следует.
В целом, реализация этого в лучшем случае кажется ошибочной.