2014-07-08 28 views
0

在文檔看它看起來像報警API可以在一定的時間火狐OS報警醒來封閉應用

我改變了從樣板例子的代碼以這種方式

// Alarm API 
var alarmDate = new Date("Jul 8, 2014 19:35:00"), 
    addAlarm = document.querySelector("#add-alarm"), 
    alarmDisplay = document.querySelector("#alarm-display"); 
if (addAlarm) { 
    addAlarm.onclick = function() { 
     var alarm = navigator.mozAlarms.add(alarmDate, "honorTimezone", { 
      "optionalData" : "I am data" 
     }); 

     alarm.onsuccess = function() { 

     var request = window.navigator.mozApps.getSelf(); 
    request.onsuccess = function() { 
    navigator.mozSetMessageHandler("alarm", function (mozAlarm) { 
     request.result.launch(); 
     alert("alarm fired: " + JSON.stringify(mozAlarm.data)); 
    }); 
}; 

request.onerror = function() { 
    alert("Error: " + request.error.name); 
}; 
}; 
重新啓動應用程序

代碼似乎只會在應用程序正在運行時(即使在後臺運行)啓動應用程序,但如果應用程序關閉,則不會。

這是預期的行爲?任何方式重新啓動封閉的應用程序?

也有可能在前臺調出應用程序,並使其解鎖屏幕?

感謝

UPDATE 正如澄清,當系統內存負載需要殺死一個應用程序出現問題。 Android提供了一種安排應用重新啓動的方式(而iOS,afaik,不...)。 如果應用程序在需要時可以重新啓動,那將會很有用。 這也節省了很多電池...

回答

2

您的代碼是錯誤的:setMessageHandler創建在onsuccess處理程序mozAlarms.add。當警報觸發時,該代碼不會被執行。你需要總是在應用程序啓動時添加監聽器。

下面是一些簡單的代碼,用於添加和響應報警(來自app-days-dhaka)。

var request = navigator.mozAlarms.add(new Date((+new Date()) + 30000), 'ignoreTimezone', { 
    type: 'yolo' 
}); 

console.log('setting to', new Date((+new Date()) + 30000) + '') 

request.onsuccess = function() { 
    console.log('success'); 
} 

request.onerror = function() { 
    console.error('err'); 
} 

navigator.mozSetMessageHandler('alarm', function() { 
    console.log('alarm'); 
    launchSelf(); 
}); 

function launchSelf() { 
    var request = window.navigator.mozApps.getSelf(); 
    request.onsuccess = function() { 
    if (request.result) { 
     request.result.launch(); 
    } 
    }; 
} 

打開應用程序(這將設置鬧鐘),然後立即關閉應用程序(通過在家中長按)。 30秒後,應用程序將自動再次打開。

+0

太棒了!謝謝。這項工作完美並明確地突出FirefoxOS作爲最簡單的操作系統來正確地進行此設置(至少對於使用JavaScript的人)! – lui