17

我们正在使用 jQuery 开发一个 HTML5 应用程序。

有没有一种方法/方法,在 JavaScript 或其他技术中,保持屏幕“打开”?

4

6 回答 6

32

我认为还有另一种方法可以在没有任何 java 代码的情况下做到这一点。您可以添加 1 秒的无限重复和隐藏视频,它会成功。我在某个地方读过它,但我不记得在哪里。

也许您可以使用以下空白视频之一:

  1. https://github.com/esc0rtd3w/blank-intro-videos
  2. https://github.com/kud/blank-video

有用!

于 2015-04-22T11:26:22.183 回答
7

谷歌的WebVR polyfill 可以在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();

于 2017-09-22T11:21:10.113 回答
3

未来的答案 - 因为它现在是实验性的 - 是使用名为: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 ...
}

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

于 2021-03-16T09:13:22.623 回答
1

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

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

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

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

于 2012-07-17T20:11:55.343 回答
1

最简单的方法是转到设置,开发人员选项,然后选择“充电时保持清醒”。无需编写任何代码!

这假设OP希望在连接外部电源时保持屏幕亮起,这是合理的,否则没有聪明的编码可以防止内部电池耗尽时屏幕很快熄灭。

外部电源可以像便携式 USB 电池一样简单。当它最终变空时,设备将像往常一样进入睡眠状态,但将在其内部电池上保持功能。

我在这里找到了这个解决方案: 发布关于保持屏幕开启的信息

于 2015-12-13T23:13:20.720 回答
1

保持设备开机不依赖于操作系统,而是依赖于浏览器。Chrome 正在实施 Wake Lock API,但仍处于试验阶段。

在完全可用之前,有一种方法可以通过在后台播放 base64 视频来模拟 api。这会锁定所有浏览器的睡眠模式。

你可以在这里找到一个 webcomponent 实现https://github.com/madeInLagny/mil-no-sleep

于 2020-01-02T13:54:52.597 回答