2013-06-19 101 views
5

我想每天從我的應用程序發送通知,使用我在github上找到的LocalNotification插件。我有以下代碼在應用程序啓動後立即發送通知。PhoneGap每天重複本地通知Android

var notification = cordova.require("cordova/plugin/localNotification"); 

       document.addEventListener('deviceready', onDeviceReady, false); 

       function onDeviceReady() { 
       alert('device ready'); 
       var id = 0; 
     id++; 
     newDate = new Date(); 
     newDate.setUTCHours(1,30,1); 
      notification.add({ 
       id : id, 
       date : newDate, 
       message : "Your message here", 
       subtitle: "Your subtitle here", 
       ticker : "Ticker text here", 
       repeatDaily : true 
      });     
} 

但我希望應用程序自動發送通知而不被打開。將選項repeatDaily設置爲true會有幫助嗎?

我做了我的研究,發現其他人能夠使用LocalNotification插件實現它。

我不太確定如何測試,因爲它要求我將AVD保持開啓一整天。目標非常簡單。我需要每天向用戶發送單個通知,而無需打開應用程序。任何幫助將不勝感激!謝謝 !!

回答

4

我從來沒有使用過插件,但有一點挖到代碼顯示我是的,只要你設置repeatDailytrue你的通知將在那裏每一天。

如果你看看AlarmHelper類,你可以看到該參數設置的if子句每天重複。

final AlarmManager am = getAlarmManager(); 

... 

if (repeatDaily) { 
     am.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, AlarmManager.INTERVAL_DAY, sender); 
    } else { 
     am.set(AlarmManager.RTC_WAKEUP, triggerTime, sender); 
    } 

一個額外的細節上AlarmReceiver類說明的是,如果你設置的時間之前的時間,(例如,現在是11:00,你將鬧鐘設置爲在每天的08:00重複),它會立即開火,然後在預定時間的第二天。所以這個類有一個if語句來防止這種情況。

if (currentHour != alarmHour && currentMin != alarmMin) { 
      /* 
      * If you set a repeating alarm at 11:00 in the morning and it 
      * should trigger every morning at 08:00 o'clock, it will 
      * immediately fire. E.g. Android tries to make up for the 
      * 'forgotten' reminder for that day. Therefore we ignore the event 
      * if Android tries to 'catch up'. 
      */ 
      Log.d(LocalNotification.PLUGIN_NAME, "AlarmReceiver, ignoring alarm since it is due"); 
      return; 
     } 

要設置日期,請使用date參數。在您的示例中,您使用的是默認返回當前日期時間的new Date(),並且您的通知將每天同時顯示。如果您想爲鬧鐘指定不同的時間,請在所需的時間內傳入日期對象!

編輯

確保您的代碼只運行一次是使用本地存儲的一種簡單方法。

function onDeviceReady(){ 
    ... 
    //note that this will return true if there is anything stored on "isAlarmSet" 
    var isSet = Boolean(window.localStorage.getItem("isAlarmSet")); 
    if (isSet){ 
     //Alarm is not set, so we set it here 
     window.localStorage.setItem("isAlarmSet",1); 
    } 
} 

而且只要確保清除變量如果你沒有設置你的報警:

localStorage.removeItem("isAlarmSet); 
+0

感謝您的答覆。根據您的建議,我編輯了我的代碼。現在我編寫了這樣的程序,通知在每天早上7點重複。我在朋友的電話裏試了一下。它第一次工作,但每當我打開我的應用程序在同一天重複。這背後有什麼可能的原因? – bala

+0

除此之外的可能原因可能是您每次運行應用程序時調用代碼。你應該只調用它一次來設置,而不再一次。 – caiocpricci2

+0

爲了安排它,我需要在'ondeviceready'事件之後調用函數。這就是我所做的,似乎很好。警報今天早上7點起飛。也許我之前提到的問題只是一個問題。謝啦 !! – bala