离子阻止手机只有在应用程序运行时才会睡眠

离子阻止手机只有在应用程序运行时才会睡眠

问题描述:

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 
}