电子应用程序即使在播放媒体时也处于空闲状态



在我的电子应用程序中,有一个主页和一个用户可以查看视频的页面。现在,要求是,如果应用程序闲置了固定的秒数(这意味着用户没有与应用程序交互,因此没有生成触摸、鼠标移动等事件(,应用程序应该自己重新加载主页,并启动屏幕保护程序。

我已经能够使用electronic的powermonitor api实现它。

这个任务的代码片段在主进程中,如下所示:

.....setInterval(() => {
let idle_time_for_app = powerMonitor.getSystemIdleTime();
if (idle_time_for_app % 62 >= 60) {
mainWindow
.loadURL(
url.format({
pathname: path.join(__dirname, "index.html"),
protocol: "file",
slashes: true,
})
)
.then()...

在这个例子中,我检查了空闲时间是否大于60秒。

现在,问题是,在有视频的页面中,即使正在播放视频,并且视频长度大于固定空闲时间,应用程序也会重定向到主页(index.html(。代码语句powerMonitor.getSystemIdleTime()即使在播放视频时,也会将
应用程序视为处于空闲状态。

我想避免这件事。我想检查一下,如果视频在应用程序中运行,应用程序不应该重定向到主页(index.html(。有办法实现吗?主进程是否有方法检测应用程序中是否正在播放任何视频?请帮忙。

我自己用IPC解决了这个问题。在播放视频的过程中,从渲染器进程中,我使用preload.js向主进程发送一个事件/通道。与此事件一起发送的值为1。但如果视频已暂停/停止,则发送的值为0。

在主进程中,我正在检查从渲染器发送的此事件/通道的值。在重新加载页面的if块(在主进程中(中,我添加了一个额外的检查,看看视频是否正在播放。只有当视频没有播放时,我才会重新加载页面。

let video_playing = false;
setInterval(() => {
let idle_time_for_app = powerMonitor.getSystemIdleTime();
if (enquiry_dialog !== null) {
setTimeout(() => {
ac.abort();
enquiry_dialog = null;
}, 10000);
}
if (idle_time_for_app % 62 >= 60 && !video_playing) {
setTimeout(() => {
mainWindow
.loadURL(
url.format({
pathname: path.join(__dirname, "index.html"),
protocol: "file",
slashes: true,
})
)
.then()
.......

ipcMain.on("event_for_video_status", (e, item) => {
if (item === "1") {
video_playing = true;
} else if (item === "0") {
video_playing = false;
}
});

最新更新