gpt4 book ai didi

ios - 为什么 Cordova 恢复事件不会在 iOS 中使用 sencha 在电源锁定模式/ sleep 模式下触发

转载 作者:行者123 更新时间:2023-12-01 16:27:38 24 4
gpt4 key购买 nike

在我的应用程序中,如果用户锁定手机。我需要导航到登录屏幕。如果用户解锁设备,我已经实现了恢复事件来导航登录屏幕。谁能告诉为什么 Cordova 恢复事件在电源锁定模式/ sleep 模式下没有触发iOS

我还需要在锁定模式下使用其他事件吗?

P.S 它正在最小化应用程序和最大化应用程序

最佳答案

尽管在 IOS 中通过按下主页按钮最小化或最大化应用程序时会触发恢复事件,但至少在 IOS 中通过按下电源按钮“关闭”或“启动”应用程序时似乎不会触发恢复事件。

一个可能的 JS 解决方案可能是检查不活动。假设应用程序在一段时间内没有收到用户触发的任何事件(30 秒,并且如果此后没有触发真正的暂停事件),例如点击/触摸事件,那么可以假设应用程序仍然可以执行一些代码(所以它仍然在前台)并“暂停”:

// threshold for inactivity state
var idleTimeout = 30000;
// variable that holds the time in seconds, which indicates how long the app has not received certain events
var timeInSecondsPassed = 0;
// interval instance
var intervalInstance = null;
// variable to handle the transition from "pause" to "resume" state
var inPauseState = false;

function startPauseListener() {
timeInSecondsPassed = 0;
var resetPassedTime = function(){
timeInSecondsPassed = 0;
// has the app reached the "pause" state and
// currently receiving certain events -> the "resume" state is reached
if(inPauseState){
inPauseState = false;
// the "resume" state is reached here
// so the same code might be executed here as it is in the resume-listener
}
};
document.ontouchstart = resetPassedTime;
document.onclick = resetPassedTime;
document.onscroll = resetPassedTime;
document.onkeypress = resetPassedTime;
intervalInstance = setInterval(checkPauseState,1000);
}

function clearPauseListener() {
clearInterval(intervalInstance);
timeInSecondsPassed = 0;
}

function checkPauseState() {
timeInSecondsPassed += 1000;
if (timeInSecondsPassed >= idleTimeout) {
inPauseState = true;
timeInSecondsPassed = 0;
// run further code here to handle "pause" state
// at this point it is assumed as soon as the app receives click/touch-events again a "resume" state is reached.
}
}

function onDeviceReady() {
// handle android devices so that the interval is stopped when a real pause event is fired and started when a real resume event is fired
document.addEventListener("resume", function(){
startPauseListener();
// your actual code to handle real resume events
}, false);

document.addEventListener("pause", function(){
clearPauseListener();
}, false);
}

必须注意的是,当应用程序真正暂停时触发暂停事件时,上面的代码不是在 IOS 中运行,而是在 android 中运行,这就是为什么您可能必须通过同时利用 resume 和 pause 以不同方式在 android 中处理这种情况- 当应用程序被主页按钮最小化时,Android 中的监听器仍然会执行间隔并在后台消耗 CPU。

另请注意,这只是一种概念代码,并未在任何设备上进行测试!!!

希望这可以帮助。

关于ios - 为什么 Cordova 恢复事件不会在 iOS 中使用 sencha 在电源锁定模式/ sleep 模式下触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com