web-dev-qa-db-ja.com

iOSモバイルサファリがアイドル/自動ロック/スリープ状態にならないようにしますか?

IOSアプリでは、application.idleTimerDisabled = YES電話が自動ロックしないようにします。

ユーザーが長時間画面に触れないDoodle Jumpのようなゲームのモバイルサファリでこれを行う必要があります。これを行うための文書化された方法またはハックはありますか?

(更新)彼らはこのサイト http://www.uncoveryourworld.com で何とかやっているようです。 iPhoneからアクセスし、バックグラウンドで音楽が再生されている建物/街路シーンに到達したら、スマートフォンをそのままにしておきます。決して眠らない。

(更新2)私は、彼らが電話がスリープ状態にならないようにする方法を詳しく調べるために、少し時間を費やしました。私は必要最低限​​のテストを実行しましたが、ストリートシーンでオーディオをループする方法が、スリープ状態にならないようにしているようです。これをテストする場合は、ページにループする単純なオーディオプレーヤーを配置して、[再生]をクリックします。

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

私が検索したすべての場所で、これは不可能であると言われているので、多少のハックがあったとしても、それを実行するための少なくともいくつかの方法があることは素晴らしいことです。そうしないと、落書きジャンプスタイルのプレイを伴うブラウザベースのゲームは不可能になります。したがって、必要に応じてゲーム/アプリにループを設定したり、サイレントループを再生したりできます。

36
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()
9
fregante

編集:この回避策は機能しなくなりました。現在のところ、Safariで電話がスリープ状態になるのを防ぐことはできません。

はい、音声ループを使用して電話がスリープ状態になるのを防ぐことができます。トリックは自動的に開始されません。ビジターが画面に触れたときにそれを再生する必要があります。

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

テストページ :タップ再生するとディスプレイはオンのままですが、iOS 7搭載のiPhoneなど一部のデバイスでは暗くなります。

注:このトリックを使用する場合は注意してください。訪問者が使用している可能性があるすべての音楽が停止し、迷惑になります。

6
robottaxes

いいえ、残念ながらできません。これを実現する唯一の方法は、UIWebViewアプリケーションを作成し、そこに指定した変数を設定することです。
https://stackoverflow.com/a/7477438/267892

1
Emil

bfred.itの回答は、audio-tagを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でテスト済みですが、Chrome)のようなUIWebViewブラウザーでは機能しない可能性があります。

デモ: http://jsbin.com/kozuzuwaya/1

0
fregante