我可以阻止手机在网页上睡觉吗?

时间:2011-05-24 06:53:02

标签: javascript iphone android html5 sleep

在应用中,我可以使用http://developer.android.com/reference/android/os/PowerManager.WakeLock.html 但有没有办法让网页运行并防止入睡? 如果它至少在android上运行会很好。

5 个答案:

答案 0 :(得分:4)

在应用程序中,有几种方法可以做到这一点,但我想你的意思只是在移动网页上,可以通过Android在任何浏览器中查看。使用普通的HTML / Javascript /等等,我真的非常怀疑它。

实际上可以可以使用Flash(在启用了插件的闪存手机上),但至少在特定情况下。我这样说是因为,在没有WAKE_LOCK权限的测试应用中,将this swf file加载到WebView中会导致某些设备出现以下异常:

  

java.lang.SecurityException:都没有   用户#####也不是当前流程   android.permission.WAKE_LOCK

然而,即使这确实有效,也会冒着崩溃没有WAKE_LOCK权限的应用程序或浏览器的风险。这可能是由于Adobe Flash Player插件中的代码错误而非任何有意的功能。

答案 1 :(得分:2)

您可以使用唤醒锁定 Web API(检查支持)

enter image description here

答案 2 :(得分:0)

在iOS设备上,每隔几秒钟刷新一次Javascript页面就会让屏幕保持清醒状态。这似乎是正确的策略,希望Android将在未来的版本中采用它。

答案 3 :(得分:0)

您可以使用:https://github.com/richtr/NoSleep.js

  

防止显示睡眠并在任何Android或iOS网络浏览器中启用唤醒锁定。

请注意,该库在某些平台/浏览器上存在一些可靠性/性能问题。用户找到了问题注释和拉出请求中列出的解决方案,但由于回购所有者当前似乎未处于活动状态,因此尚未添加解决方案。

建议在生产中使用之前,请检查这些拉取请求(和/或问题)是否有潜在的改进。

答案 4 :(得分:0)

在您的页面上播放假的循环视频或音频

您可以使用这个快速示例将带有虚假数据的循环视频添加到您的页面并防止移动设备进入睡眠状态:

// Create the root video element
var video = document.createElement('video');
video.setAttribute('loop', '');
// Add some styles if needed
video.setAttribute('style', 'position: fixed;');

// A helper to add sources to video
function addSourceToVideo(element, type, dataURI) {
    var source = document.createElement('source');
    source.src = dataURI;
    source.type = 'video/' + type;
    element.appendChild(source);
}

// A helper to concat base64
var base64 = function(mimeType, base64) {
    return 'data:' + mimeType + ';base64,' + base64;
};

// Add Fake sourced
addSourceToVideo(video,'webm', base64('video/webm', 'GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA='));
addSourceToVideo(video, 'mp4', base64('video/mp4', 'AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw=='));

// Append the video to where ever you need
document.body.appendChild(video);

// Start playing video after any user interaction.
// NOTE: Running video.play() handler without a user action may be blocked by browser.
var playFn = function() {
    video.play();
    document.body.removeEventListener('touchend', playFn);
};
document.body.addEventListener('touchend', playFn);