我们正在使用 jQuery 开发一个 HTML5 应用程序。
有没有一种方法/方法,在 JavaScript 或其他技术中,保持屏幕“打开”?
我认为还有另一种方法可以在没有任何 java 代码的情况下做到这一点。您可以添加 1 秒的无限重复和隐藏视频,它会成功。我在某个地方读过它,但我不记得在哪里。
也许您可以使用以下空白视频之一:
有用!
谷歌的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();
未来的答案 - 因为它现在是实验性的 - 是使用名为: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 ...
}
您可以在此处关注此功能的支持
如果不编写至少一点 Java 代码,就没有办法只编写 JavaScript 或其他 Web 代码来保持屏幕开启。
为了解释为什么我如此确定,如果您通过 html5 开发 Web 应用程序,您必须使用 WebView 作为应用程序的主“屏幕”来托管您的 html、javascript 代码。因此,您的“网络代码”不会直接在应用程序中运行,而是使用视图作为其持有者。正如您可以猜到的,您不能只锁定一些甚至没有在本机部分运行的代码的屏幕。
如果您不是 android 编程专家,我可以提供一种非常简单的方法来保持屏幕打开。在第一个活动中,我猜它使用了 WebView,在onCreate
之后添加super
:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
最简单的方法是转到设置,开发人员选项,然后选择“充电时保持清醒”。无需编写任何代码!
这假设OP希望在连接外部电源时保持屏幕亮起,这是合理的,否则没有聪明的编码可以防止内部电池耗尽时屏幕很快熄灭。
外部电源可以像便携式 USB 电池一样简单。当它最终变空时,设备将像往常一样进入睡眠状态,但将在其内部电池上保持功能。
我在这里找到了这个解决方案: 发布关于保持屏幕开启的信息
保持设备开机不依赖于操作系统,而是依赖于浏览器。Chrome 正在实施 Wake Lock API,但仍处于试验阶段。
在完全可用之前,有一种方法可以通过在后台播放 base64 视频来模拟 api。这会锁定所有浏览器的睡眠模式。
你可以在这里找到一个 webcomponent 实现https://github.com/madeInLagny/mil-no-sleep