Ionic防止手机在应用程序运行时休眠

时间:2016-12-15 23:13:38

标签: ios cordova sleep-mode

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插件。

如何实现所需的功能?

2 个答案:

答案 0 :(得分:1)

您可以将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
}

答案 1 :(得分:0)

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

  

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

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