2011-05-06 11 views
23

कोड जो अलार्म शेड्यूल करता है।एंड्रॉइड या टास्क किलर द्वारा ऐप की हत्या के बाद अनुसूचित अलार्म को कैसे बचाया जाए?

PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, time, sender); 

यह ठीक काम कर रहा है, लेकिन जब मैं टास्क किलर में अपना ऐप मारता हूं, तो मैंने अपना शेड्यूल अलार्म खो दिया। इस समस्या को हल कैसे करें?

+0

मैं इस समस्या को हल करने के परिदृश्य की कोशिश कर रहा हूं? – mahesh

+0

क्या आप किसी भी पावर सेवर ऐप (ग्रीनफाइज) का उपयोग कर रहे हैं या आप बल का उपयोग कर रहे हैं? कुछ बार यह कुछ बचाए गए बिजली बचत तकनीक जैसे हुवाई (जहां एक ऐप को चलने के लिए संरक्षित के रूप में सूचीबद्ध करने की आवश्यकता है) के कारण हो सकता है? –

उत्तर

21

क्या आपका एप्लिकेशन एक संदेश प्रसारित कर रहा है क्योंकि यह संदेश मारा जा रहा है, और जब यह संदेश प्रसारित होता है, तो श्रोता जांच लें कि सेवा अभी भी चल रही है या नहीं .. यदि यह इसे नहीं चलाती है। यह बीमा करेगा कि एप्लिकेशन की मौत होने पर भी आपकी सेवा चल रही है।

अद्यतन

मैं के लिए आप

Death/Restart of a service

OnDestroy() प्रणाली सेवा का हिस्सा है एक प्रवाह आरेख बनाने की कोशिश करेंगे।

मुझे उम्मीद है कि इससे मदद मिलती है।

अद्यतन 2

एक बात मैं उल्लेख करना भूल गया तथ्य यह है कि आप आदर्श केवल चाहते सेवा का एक उदाहरण चलाने के लिए है। तो बस ऑनस्टार्ट() के भीतर मौजूद आईडी को देखकर इसे शुरू करने के लिए == से 1 होना चाहिए .. इसे अनदेखा करें। के नोटिस की

तरीके सेवा कक्षा:

onStart(): यह विधि जब सेवा प्रारंभ की जा रही है

OnDestroy (कहा जाता है): यह विधि है कि जब एक सेवा कहा जाता है recei इस तरीके:)

onReceive (: की मौत हो जा रही है BroadcastReciever वर्ग के नोटिस की

तरीके Ves सभी उद्देश्यों है कि यह (जब तक फ़िल्टर किए गए)

के लिए भेजा जाता BroadcastRecievers (संदेश प्रसारण) और सेवा पर उदाहरण देखें (एक सेवा शुरू)

संदर्भ:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

http://developer.android.com/reference/android/app/Service.html

+2

क्या आपका लेखन कोड उदाहरण हो सकता है? मैं समझ नहीं पा रहा हूं कि यह सेवा ऐप के साथ क्यों मरती है। दस्तावेज़ीकरण कहता है "नोट: अलार्म प्रबंधक उन मामलों के लिए है जहां आप अपना आवेदन कोड किसी विशिष्ट समय पर चलाना चाहते हैं, भले ही आपका एप्लिकेशन वर्तमान में चल रहा न हो," – Divers

+1

इसमें आपकी सेवा की मृत्यु शामिल नहीं है। – JoxTraex

+3

जोक्सट्रैक्स - अच्छा चित्र! – Brian

5

ऐप बंद होने पर अलार्म मैनेजर द्वारा सेट अलार्म नहीं मारा जाता है, जब कभी रीबूट होता है तो ओएस द्वारा सभी अलार्म को साफ़ किया जाता है क्योंकि कोई दृढ़ता नहीं होती है। तो आपको दृढ़ता से करने की जरूरत है।

  • हर समय अलार्म सेट करते समय अलार्म समय बचाता है।
  • बूट समापन के लिए एक रिसीवर पंजीकृत करें।
  • रीबूट पर अलार्म फिर से सेट करें।

    public class BootReceiver extends BroadcastReceiver { 
    
        @Override 
        public void onReceive(Context context, Intent intent) { 
         //re register the alarm 
        } 
    } 
    

Manifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
....... 
<receiver 
     android:name="BootReceiver" 
     android:enabled="true" 
     android:exported="true" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

आप (जब यह अगले शुरू हो जाना चाहिए पर जब अलार्म शुरू हो रहा किया जाना चाहिए पर समय या समय) समय बचाने के लिए SharedPreference इस्तेमाल कर सकते हैं

बूट रिसीवर पर नया अलार्म सेट करने के लिए इसका उपयोग करें।

+0

तो मेरा मतलब है कि जब मैंने एसक्यूएलईटीई का उपयोग किया है तो यह अभी भी –

+0

हां @IdrisStack आप अलार्म के समय को स्टोर करने के लिए SQLite का भी उपयोग कर सकते हैं –

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