离子阻止手机只有在应用程序运行时才会睡眠
问题描述:
Insomnia插件承诺保持设备在window.plugins.insomnia.keepAwake()
之间保持清醒状态,直到调用window.plugins.insomnia.allowSleepAgain()
时。离子阻止手机只有在应用程序运行时才会睡眠
但对于一些应用程序它才有意义设备保持清醒,而应用程序是活跃。如果用户暂停的应用程序而忘记他们已经离开它会在后台运行,这将是很好,让睡眠,而不是消灭他们的电池电量。
上的应用程序需要暂停通常的操作是通过pause
事件处理:
function onDeviceReady() {
document.addEventListener("pause", onPause, false);
}
function onPause() {
window.plugins.insomnia.allowSleepAgain();
}
但根据Cordova docs,iOS上的暂停处理程序不能调用任何本地 - 这将包括失眠插件。
如何实现所需的功能?
答
查看该插件的来源,在iOS上,它调用setIdleTimerDisabled:true
上的UIApplication
实例。 isIdleTimerDisabled
是
一个布尔值,它控制空闲计时器是否对应用禁用。
它并未禁用整个设备的空闲计时器,所以如果用户暂停您的应用程序,则空闲计时器将再次启用。
答
您可以将allowSleepAgain()
与$timeout
一起使用,并在每次使用keepAwakeforMinutes()
做某事时重新启动延迟。
var keepAwakeforMinutes = function(minutes){
// when an action is done,
// cancel the last allowSleepAgain() $timeout if exists to create a new longer one
if ($rootScope.sleeping){
// alert("cancel previous timeout");
$timeout.cancel($rootScope.sleeping);
}
// be awake for the next minutes by creating a new timeout
$window.plugins.insomnia.keepAwake();
$rootScope.sleeping = $timeout(function() {
// timeout ended
$window.plugins.insomnia.allowSleepAgain();
}, 60000*minutes); // awake for the next minutes
}