it-swarm.com.ru

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

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

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

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

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

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

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

33
forrex

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()
7
bfred.it

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

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

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

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

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

6
bendyourtaxes

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

1
Emil

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

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

0
Apeli

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

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

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

0
Besi

Вы можете остановить спящий и затемнение экрана в 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
bfred.it