2014-02-21 22 views
1

Я разрабатываю приложение для ОС firefox, и у меня есть проблема с сигналами тревоги. Аварийные сигналы не срабатывают, если телефон заблокирован.Тревоги потеряны, если телефон заблокирован.

Проблема возникает, когда телефон находится в состоянии блокировки, поскольку рабочий стол уведомлений не срабатывает. Но APP находится на фоне, когда вы разблокируете телефон, но ничего не происходит.

EDIT

Решение в коде. Тогда, я думаю, проблема исчезла.

Я могу добавить сигналы с помощью этой функции:

// the solution for the app working right is writting this window.onload function 
window.onload = function() { 
    function addAlarm(){ 
      // Data alarm will be fire 
      var myDate = new Date(); 

      myDate.setMinutes(myDate.getMinutes()+1); 

      // information for alarm 
      var data = { 
       foo: "bar" 
      } 

      var request = navigator.mozAlarms.add(myDate, "ignoreTimezone", data); 

      request.onsuccess = function() { 
       console.log("La alarma ha sido programada"); 
      }; 

      request.onerror = function() { 
       console.log("Ha ocurrido un error: " + this.error.name); 
      }; 
    } 

    //That get the alarm event to fire the alarm and also add a desktop notification. 

    navigator.mozSetMessageHandler("alarm", function (mozAlarm) { 
     console.log('fired Alarm'); 
     // function that add a desktop notification 
     notifyMe(); 
     $('#alarmFired').append('<p>alarm fired: '+JSON.stringify(mozAlarm)+'</p>'); 

    }); 

} 

функция для настольных уведомлений:

function notifyMe() { 
    var options = {body: "notification body", icon : 'http://www.famfamfam.com/lab/icons/mini/icons/icon_accept.gif'} 

    // Let's check if the browser supports notifications 
    if (!("Notification" in window)) { 
    alert("This browser does not support desktop notification"); 
    } 

    // Let's check if the user is okay to get some notification 
    else if (Notification.permission === "granted") { 
    // If it's okay let's create a notification 
    var notification = new Notification("Hi there!", options); 
    } 

    // Otherwise, we need to ask the user for permission 
    // Note, Chrome does not implement the permission static property 
    // So we have to check for NOT 'denied' instead of 'default' 
    else if (Notification.permission !== 'denied') { 
    Notification.requestPermission(function (permission) { 

     // Whatever the user answers, we make sure we store the information 
     if(!('permission' in Notification)) { 
     Notification.permission = permission; 
     } 

     // If the user is okay, let's create a notification 
     if (permission === "granted") { 
     var notification = new Notification("Hi there!", options); 
     } 
    }); 
    } 

    notification.onclick = function(){ 
    console.log('clicked notification'); 
    openApp(); 
    } 
} 
+0

Пожалуйста, используйте ответ, чтобы публиковать ответ, не редактируйте его в вопросе. На той же странице: не используйте ответ в качестве комментария, чтобы сказать, что вы ответили в своем вопросе :). Звучит запутанно, но в основном просто используйте вопрос для вопроса, ответа и ответа, и вы будете в порядке – Nanne

ответ

0

Пако,

Вы могли бы сделать использование следующих техника

// Log visibility of the app 
var logVisibility = document.querySelector("#log-visibility"), 
    logVisibilityDisplay = document.querySelector("#log-visibility-display"); 
if (logVisibility && logVisibilityDisplay) { 
    logVisibility.onclick = function() { 
     logVisibilityDisplay.style.display = "block"; 
     logVisibilityDisplay.innerHTML = "I have focus!<br>" 
     document.addEventListener("visibilitychange", function() { 
      if (document.hidden) { 
       console.log("Firefox OS Boilerplate App is hidden"); 
       logVisibilityDisplay.innerHTML += "Now I'm in the background<br>"; 
      } 
      else { 
       console.log("Firefox OS Boilerplate App has focus"); 
       logVisibilityDisplay.innerHTML += "I have focus!<br>"; 
      } 
     }); 
    }; 
} 

В сочетании с запрашивающим блокировки экрана, как

// Keep screen on 
var lock = null; 
var keepscreen = document.querySelector("#keep-screen-on"); 
if (keepscreen) { 
    keepscreen.onclick = function() { 
     if (!lock) { 
      lock = window.navigator.requestWakeLock('screen'); 
      keepscreen.innerHTML = "Remove the lock"; 
     } 
     else { 
      lock.unlock(); 
      lock = null; 
      keepscreen.innerHTML = "Keep screen on"; 
     } 
    }; 
} 

Моя идея состоит в следующем:

  1. Добавить тревогу
  2. Когда функция, которая запускает сигнал тревоги вызывается, вы попробуйте запросить блокировку на экране (устройство не может быть заблокировано таким образом).
  3. После того, как ваша тревога была отключена (взаимодействие пользователя отключилось), вы снова отпустите блокировку экрана.

Я не уверен на 100%, что это сработает, но об этом я могу сейчас подумать.

EDIT

Окей, я искал вокруг немного больше, и вы можете использовать wakeLock вместо скрин замка. Для получения дополнительной информации, пожалуйста, проверьте Screen WebAPI at mdn

Смежные вопросы