Предотвратить мобильное сафари на iOS из режима ожидания / автоматической блокировки / сна? - PullRequest
34 голосов
/ 15 марта 2012

В приложении для iOS вы можете установить application.idleTimerDisabled = YES, чтобы запретить автоматическую блокировку телефона.

Мне нужно сделать это в мобильном сафари для такой игры, как Doodle Jump, где пользователь может не касаться экрана в течение длительного периода времени. Есть ли какой-нибудь документированный метод или хак для этого?

(Update) Кажется, они делают это как-то на этом сайте http://www.uncoveryourworld.com. Посещение с вашего iphone, и когда вы добираетесь до зданий / уличной сцены с музыкой, играющей на заднем плане, просто оставьте свой телефон в покое. Он никогда не ложится спать.

(обновление 2) Я потратил некоторое время, чтобы поближе взглянуть на то, как они могут удерживать телефон от засыпания. Я провел тест «Баскетбол», и кажется, что то, как они зацикливают звук на уличной сцене, не дает ему уснуть. Если вы хотите проверить это, просто установите простой аудиопроигрыватель на вашей странице и нажмите кнопку воспроизведения:

<audio src="loop.mp3" onended="this.play();" controls="controls" autobuffer></audio>

Везде, где я искал, говорят, что это невозможно, поэтому приятно видеть, что есть хотя бы какой-то способ сделать это, даже если немного взломать. В противном случае игра на основе браузера с игрой в стиле каракули не была бы возможной. Таким образом, вы можете иметь цикл в вашей игре / приложении, если это уместно, или просто играть в немом цикле.

Ответы [ 6 ]

7 голосов
/ 14 декабря 2016

NoSleep.js , похоже, работает в iOS 11 и, как сообщается, работает и на Android.


Старый ответ

Это простой способ только для HTML: зацикливание встроенного автоматического воспроизведения видео (может также работать в Android Chrome 53+)

<video playsinline muted autoplay loop src="https://rawgit.com/bower-media-samples/big-buck-bunny-480p-30s/master/video.mp4" height=60></video>

См. Ту же демонстрацию на CodePen (включает секундомер)

Примечания

  • Избегайте загрузки большого видео только для этого. Возможно, сделайте короткое, крошечное, только черное видео или используйте
  • Для полной работы видео должно быть всегда в области просмотра. или . Вам нужно запустить его через JS: video.play()
6 голосов
/ 04 марта 2013

Редактировать: Эта работа больше не работает.В настоящее время невозможно запретить спящий режим телефона в режиме сафари.

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

<audio loop src="http://www.sousound.com/music/healing/healing_01.mp3"></audio>

Тестовая страница : нажмите «Воспроизведение» и отобразитебудет оставаться включенным, но на некоторых устройствах он будет тусклым, например, iPhone с iOS 7.

Примечание: будьте осторожны при использовании этого трюка, потому что он остановит любую музыку, которую могут использовать посетители -и это будет раздражать их.

1 голос
/ 15 марта 2012

Нет, к сожалению, вы не можете этого сделать. Единственный способ добиться этого - создать UIWebView-приложение и задать указанную вами переменную.
https://stackoverflow.com/a/7477438/267892

0 голосов
/ 03 октября 2016

Ответ bfred.it работает, если вы замените аудио-тег на enter code here -tag - но только если страница открыта в iOS10 + Safari И пользователь запустил видео. Вы можете скрыть видео с помощью CSS.

Кроме того, я подозреваю, что эта функция также будет удалена в какой-то момент.

0 голосов
/ 22 июня 2014

Вы можете перестать спать и затемнение экрана в iOS Safari, подделав обновление каждые 20–30 секунд

var stayAwake = setInterval(function () {
    location.href = location.href; //try refreshing
    window.setTimeout(window.stop, 0); //stop it soon after
}, 30000);

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

clearInterval(stayAwake); //allow device sleep again when not needed

Протестировано в Safari iOS 7, 7.1.2 и 8.1, но может не работать в браузерах UIWebView, таких как Chrome для iOS или приложение Facebook

Демо: http://jsbin.com/kozuzuwaya/1

0 голосов
/ 29 июля 2013

Даже если этот подход может не подходить в каждом случае, вы можете предотвратить блокировку телефона, перезагрузив страницу с помощью Javascript.

// This will trigger a reload after 30 seconds
setTimeout(function(){
    self.location = self.location
}, 30000);

Обратите внимание, что я протестировал это с iOS7 бета 3

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