Firefox OS будильник, чтобы разбудить закрытое приложение
Глядя на документацию, похоже, что API-интерфейс будильника можно использовать для перезапуска приложения в определенное время.
Я изменил код из примера шаблона таким образом
// 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);
};
};
Кажется, что код вызывает приложение, только если оно запущено (даже в фоновом режиме), НО, если приложение закрыто.
Это предполагаемое поведение? Есть ли способ перезапустить закрытое приложение?
Также возможно ли вывести приложение на передний план и заставить его разблокировать экран?
Спасибо
ОБНОВЛЕНИЕ Как пояснение, проблема возникает, когда загрузка системной памяти требует уничтожения приложения. Android предоставляет способ запланировать перезапуск приложения (в то время как iOS, afaik, не...). Было бы полезно, если бы приложение могло быть перезапущено в тот момент, когда оно требуется. Это также экономит много батареи...
1 ответ
Ваш код неверен: 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 секунд приложение снова откроется автоматически.