2013-06-19 11 views
5

में हर दिन स्थानीय अधिसूचना दोहराई जाती है। मैं जिथब में मिले स्थानीय नोटिफिकेशन प्लगइन का उपयोग करके अपने ऐप से प्रतिदिन अधिसूचनाएं भेजने की कोशिश कर रहा हूं। मेरे पास निम्न कोड है जो एप्लिकेशन प्रारंभ होने पर अधिसूचना भेजता है।फोनगैप एंड्रॉइड

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 
      });     
} 

लेकिन मैं चाहता हूं कि एप्लिकेशन स्वचालित रूप से खोले बिना अधिसूचना भेज दे। विकल्प दोहराना सेट करने से सच में मदद मिलेगी?

मैंने अपना शोध किया और पाया कि अन्य लोग स्थानीयकरण प्लगइन का उपयोग करके इसे प्राप्त करने में सक्षम थे।

मुझे यकीन नहीं है कि परीक्षण कैसे किया जाए क्योंकि मुझे एवीडी को एक पूर्ण दिन के लिए चालू रखने की आवश्यकता है। उद्देश्य बहुत आसान है। मुझे ऐप खोलने के बिना प्रतिदिन एक ही अधिसूचना भेजनी होगी। किसी भी तरह की सहायता की हम सराहना करेंगे !! धन्यवाद !!

उत्तर

4

मैंने कभी प्लगइन का उपयोग नहीं किया है, लेकिन कोड में थोड़ा खोदने से मुझे पता चलता है कि जब तक आप repeatDaily से true सेट करते हैं, तो आपकी सूचना हर दिन वहां होगी।

यदि आप AlarmHelper कक्षा पर एक नज़र डालते हैं तो आप उस पैरामीटर सेटिंग के लिए हर दिन दोहराने के लिए खंड देख सकते हैं।

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 वर्ग पर समझाया यह होगा (आप 8:00 पर हर दिन को दोहराने के लिए अलार्म सेट जैसे अब 11:00 है और) है कि यदि आपने किसी पुराने समय के लिए समय निर्धारित करते हैं, है तुरंत आग, और फिर अगले दिन निर्धारित समय पर। तो उस वर्ग को रोकने के लिए अगर कोई खंड है।

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() का उपयोग कर रहे हैं जो डिफ़ॉल्ट डेटाटाइम डिफ़ॉल्ट रूप से लौटाता है, और आपकी अधिसूचना एक ही समय में प्रदर्शित की जाएगी। यदि आप अपने अलार्म के लिए एक अलग समय निर्दिष्ट करना चाहते हैं, तो वांछित समय के साथ डेट ऑब्जेक्ट में पास करें!

संपादित

सुनिश्चित करते हुए अपने कोड केवल एक बार LocalStorage उपयोग कर रहा है चल रहा है की एक आसान तरीका है।

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

संबंधित मुद्दे