2014-07-08 25 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