在HTML5中,如何保持Android设备的屏幕?

Mrg*_*oos 10 html5 android

我们正在使用JQuery在HTML5中开发一个App.

是否有一种方法/方法,在JavaScript或其他技术,以保持屏幕"开启"?

谢谢.

Her*_*ini 22

我认为还有另一种方法,没有任何java代码.您可以使用无限重复和隐藏添加1秒的视频,它将完成这一操作.我在某个地方读过它,但我不记得在哪里.

有用!

  • 这有效!我使用`ffmpeg -r 20 -t 1 -s 1x1 -f rawvideo -pix_fmt rgb24 -i/dev/zero noop.mpeg`生成一个"空"1秒视频,并将其放在`<video loop>`标签下.从触摸事件触发"播放()",并且在选项卡聚焦时屏幕保持打开状态.`pause()`视频让屏幕再次入睡. (5认同)
  • 优点:不需要用户配置设置。缺点:当电池没电时,屏幕最终会熄灭,这可能会使用户感到烦恼。 (2认同)
  • 太棒了!从 CPU 使用的角度来看,让视频更长一点是否明智,因为颜色没有变化的单像素视频可能不会对文件大小产生太大影响?我的理论是,播放长视频而不是从每秒开始播放相同的视频会消耗更少的 CPU,因为在这两种情况下,视频都在 100% 的时间内运行,但重新启动时必须涉及一些额外的工作视频。 (2认同)

Aym*_*rsy 6

未来的答案 - 因为它现在处于实验阶段 - 是使用名为:Screen Wake Lock API的新 API

我认为您可以将其与以前的解决方法答案混合使用

// Create a reference for the Wake Lock.
let wakeLock = null;

// create an async function to request a wake lock
try {
  wakeLock = await navigator.wakeLock.request('screen');
  statusElem.textContent = 'Wake Lock is active!';
} catch (err) {
  // try other solutions here ...
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处关注此功能的支持


dav*_*010 5

谷歌的WebVR填充工具办法做到这一点在Chrome。它基本上会创建一个微小的视频(带有数据URL,因此不需要额外的下载)并循环播放。

好像是hack,所以如果将来它不可靠,我也不会感到惊讶。

他们的代码也可以通过触发位置更新在iOS上实现相同的功能。

这是Android的相关代码:

var Util={};
Util.base64 = function(mimeType, base64) {
  return 'data:' + mimeType + ';base64,' + base64;
};

var video = document.createElement('video');
  video.setAttribute('loop', '');

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

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

video.play();
Run Code Online (Sandbox Code Playgroud)


10s*_*10s 1

没有办法只编写 JavaScript 或其他 Web 代码来保持屏幕打开,而不编写至少一点 Java 代码。

为了解释为什么我如此确定,如果您正在通过 html5 开发 Web 应用程序,则必须使用 WebView 作为应用程序的主“屏幕”来托管 html、javascript 代码。因此,您的“Web 代码”并不直接在应用程序中运行,而是使用 View 作为其持有者。正如您可以猜测的那样,您不能仅仅通过某些甚至不在本机部分中运行的代码来锁定屏幕。

如果您不是 Android 编程专家,我可以提供一种非常简单的方法来保持屏幕打开。在第一个活动中,我猜使用了 WebView,在onCreate之后添加super

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);