2

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 上的 Pause 处理程序不能调用任何本机内容——其中包括 Insomnia 插件。

如何实现想要的功能?

4

2 回答 2

1

您可以使用allowSleepAgain()with a$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
}
于 2017-03-28T20:28:55.000 回答
0

查看该插件的来源,在 iOS 上它调用setIdleTimerDisabled:true实例UIApplicationisIdleTimerDisabled

一个布尔值,用于控制是否为应用禁用空闲计时器。

它不会禁用整个设备的空闲计时器,因此如果用户暂停您的应用程序,则空闲计时器将再次启用。

于 2016-12-16T00:00:14.897 回答