查看文档,看起来警报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则没有...)。
如果某个应用可以在需要时重新启动,这将很有用。
这也节省了大量电池...

最佳答案

您的代码是错误的:setMessageHandler是在onsuccessmozAlarms.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秒后,应用程序将再次自动打开。

10-04 22:13
查看更多