अलार्म मैनजर कई उपकरणों में काम नहीं कर रहा है


85

मेरा ऐप अलार्म मैनजर का उपयोग करता है और यह 4 साल पहले से काम कर रहा है। लेकिन मैंने देखा कि यह कुछ उपकरणों में विफल होने लगा।

मुझे पूरा यकीन है कि कोड सही है (मैं WakefulBroadcastReceiver, और setExactAndAllowWhileIdle को Doze वाले उपकरणों के लिए उपयोग कर रहा हूं) क्योंकि यह Nexus डिवाइस पर पूरी तरह से काम कर रहा है, लेकिन यह कुछ निर्माताओं (Huawei, Xiaomi ...) के उपकरणों में विफल रहता है।

उदाहरण के लिए, Huawei उपकरणों में एक प्रकार का बैटरी प्रबंधक होता है जो ऐप्स को मारता है, और जब कोई ऐप मारा जाता है, तो अनुसूचित अलार्म रद्द कर दिया जाता है। तो Huawei बैटरी प्रबंधक में "संरक्षित" के रूप में एक ऐप सेट करना समस्या का हल करता है।

लेकिन हाल ही में मैंने देखा कि यह अधिक उपकरणों के साथ काम नहीं कर रहा है: श्याओमी, सैमसंग (शायद यह नए "स्मार्ट मैनेजर" से संबंधित है?) ... ऐसा लगता है कि यह व्यवहार एक मानक बन रहा है: पृष्ठभूमि ऐप्स को मारने के लिए।

क्या किसी को इस के बारे में कुछ भी मालूम है? अलार्म सुनिश्चित करने का कोई तरीका निकाल दिया गया है?

EDIT: यह समस्या विभिन्न निर्माताओं द्वारा जोड़े गए "बैटरी सेवर्स" के कारण होती है। अधिक जानकारी यहाँ: https://dontkillmyapp.com/


8
निर्माता बिजली की खपत के लिए ऐप्स को दोष देते हैं, और वे ऑक्टा-कोर का विपणन करते हैं जो सीपीयू की तुलना में कम कोर के साथ अधिक बैटरी खाती है। क्या उन्हें लगता है कि बस एक कोर जोड़ने से उनके फोन की गति बढ़ जाएगी?
फ्रोजनफायर

1
@AviLevinshtein शायद मैं आपके सवाल को गलत समझ गया। मैं अपनी गतिविधि में अलार्म बना रहा हूं। फिर, जब अलार्म बंद हो जाता है, तो एक प्रसारण रिसीवर निष्पादित होता है, और अंत में, एक WakefulIntentService (@commonsware से वर्ग) निष्पादित होता है।
सर्जियो विएड्स

2
@JFValdes मैं अभी भी एक समाधान की तलाश में हूं। अलार्म मैनजर वेनिला एंड्रॉइड वाले उपकरणों पर पूरी तरह से काम कर रहा है। समस्या यह है कि निर्माता एंड्रॉइड सुविधाओं को "बढ़ाने" की कोशिश कर रहे हैं, और उन्होंने अलार्म मैनजर को तोड़ दिया ... निर्माताओं को अपने स्वयं के "बैटरी सेवर" को लागू नहीं करना चाहिए, यदि वे मानक डोज़ मोड का उपयोग करते हैं, तो अलार्ममैन पूरी तरह से काम करेगा ... फिर भी देख रहा है एक समाधान के लिए ...
सर्जियो विएड्स

1
क्या अभी तक कोई समाधान है? अन्य ऐप जैसे रिमाइंडर या कुछ और कैसे करते हैं? सेटअल्मर की तुलना में एक और विकल्प होना चाहिए, जो अलार्म के लिए है, अनुस्मारक के लिए नहीं
kv1dr

1
@SergioViudes मैं भी ट्रैकिंग के लिए श्याओमी उपकरणों के साथ एक ही समस्या का सामना कर रहा हूँ। और अगर मैं निम्नलिखित सेटिंग करके 4 में से 3 उपकरणों में सही ढंग से काम करने की तुलना में अपने ऐप को बैटरी सेविंग प्रतिबंध से बाहर रखता हूं - -> बैटरी पर जाएं -> पावर -> ऐप बैटरी सेवर -> अपने ऐप का चयन करें कोई प्रतिबंध नहीं (पृष्ठभूमि सेटिंग्स के लिए) फिर पृष्ठभूमि स्थान के लिए विकल्प की अनुमति दें
इमरान खान सैफी

जवाबों:


17

मैं इसे कई हफ्तों पहले ही हल करने की कोशिश कर रहा हूं। मुझे कुछ नहीं मिला। हुवावे ने कुछ समय के बाद सभी अलार्म को मार दिया। अगर मैं उनकी बैटरी सेवर में ऐप को सुरक्षित ऐप पर रखूं तो यह मदद नहीं करेगा। लेकिन अगर मैं अलार्म, घड़ी या कैलेंडर जैसे शब्दों को शामिल करने के लिए अपने ऐप का पैकेज नाम बदलता हूं, तो यह किसी भी अन्य डिवाइस की तरह बिल्कुल सामान्य काम करता है। मुझे समझ नहीं आ रहा है कि Google इस बकवास के लिए प्रमाणन कैसे दे सकता है। मुझे लगता है कि OEM को इस तरह से कोर प्लेटफॉर्म को संशोधित नहीं करना चाहिए। मैं समझता हूं कि उनके पास अपना बैटर सेवर है जो कुछ समय बाद ऐप को मार देता है, जब उपयोगकर्ता इसका उपयोग नहीं करते हैं लेकिन यह हत्या संरक्षित ऐप्स की भी है।

इसके अलावा setAlarmClock () के लिए सटीक समय अलार्म मदद करता है। लेकिन विजेट अपडेट जैसे विचार के लिए इसका उपयोग करना संभव नहीं है।

अद्यतन: पैकेज नाम कीवर्ड द्वारा संरक्षण पहले से ही वर्तमान Huawei उपकरणों पर काम नहीं कर रहा है, यह 2017 में सच था।


उसी के रूप में, मैं भी कोशिश करता हूं लेकिन कुछ ब्रांड Xiaomi, Oppo, Huawei पर इस समस्या को हल करने के लिए कुछ भी नहीं है। वे कभी-कभी बैटरी को बचाने के लिए पृष्ठभूमि की प्रक्रिया और अलार्म को मार देते हैं।
एंडी सुसीलो

1
मेरे पास huawi फोन है, पैकेज का नाम अलार्म / कैलेंडर में बदलने से कुछ नहीं होता है। फोन मैनेजर से सुरक्षित ऐप सूची में अपने ऐप को जोड़ने के लिए केवल इसे दरकिनार करें
आशीष परदेशी

9

मुद्दा है स्मार्ट मैनेजर। सैमसंग में एक बैटरी प्रबंधक है जो कई बार पृष्ठभूमि में चलने वाले कुछ ऐप्स को अक्षम कर देता है। इसने ऐप पर वापस जाते समय "फिर से शुरू" करने की कोशिश की लेकिन पूरी तरह से एप्लिकेशन को निष्क्रिय कर देता है या हर 5 मिनट या इसके बाद (सैमसंग के पास यह कैसे है) फिर से शुरू हो सकता है।

यह एंड्रॉइड के स्टॉक संस्करणों पर काम करेगा क्योंकि कोई सैमसंग प्रबंधक नहीं है। आप एंड्रॉइड के कस्टम संस्करण भी स्थापित कर सकते हैं जिसमें एसएम (रोम के आधार पर) को सक्षम करने की कुछ विशेषताएं हैं।


मैं पागल हो रहा हूं क्योंकि मेरे पास इसे जांचने के लिए कोई सैमसंग डिवाइस नहीं है। मुझे केवल इतना पता है कि मेरे ऐप के उपयोगकर्ता मुझे क्या बता रहे हैं। क्या आप जानते हैं कि समस्या यह है कि अलार्म मैन काम नहीं कर रहा है क्योंकि ऐप की मौत हो जाती है? या समस्या यह है कि डिवाइस तब नहीं जा सकता जब अलार्म उस प्रबंधक की वजह से बंद हो जाता है?
सर्जियो विएड्स

@SergioViudes हाल ही में बहुत सारी कंपनियां अपने स्वयं के कार्यान्वयन कर रही हैं। जैसे कि एलजी में एक है जो सैमसंग के समान काम करता है, हो सकता है कि आपके फोन में एक हो? समस्या अलार्म नहीं है, अलार्म ऐप को ऐसी स्थिति में धकेल दिया जाता है जहां यह पूरी तरह से निष्क्रिय है। स्मार्ट मैनेजर को लगता है कि यह सिर्फ एक यादृच्छिक ऐप है जिसकी आपको आवश्यकता नहीं है। मैंने देखा कि कुछ ऐप्स इसे पा सकते हैं, हो सकता है कि कुछ ऐप्स स्मार्ट मैनेजर द्वारा स्वीकार किए जाएं।
SA

1
@SergioViudes मेरे पास परीक्षण करने के लिए एक सैमसंग है और मैं आपको बता सकता हूं कि बहुत कुछ नहीं है जो आप इससे प्राप्त कर सकते हैं। जब स्मार्ट मैनेजर आपके ऐप का अनुकूलन करता है तो कोई त्रुटि या कुछ भी नहीं है, यह बस रोक के समान मर जाता है। हालांकि यह हाल के ऐप्स की सूची में अभी भी है
टिम

धन्यवाद टिम। "स्मार्ट" प्रबंधक से एप्लिकेशन को बाहर किए बिना इस समस्या को हल करने के लिए बहुत अच्छा होगा।
सर्जियो विएड्स

xiaomi (miui), vivo और htc जैसी डिवाइस डिफ़ॉल्ट रूप से अनुमतियों की एक पूरी गुच्छा सेट करती हैं, जब तक कि यह "विश्वसनीय" ऐप्स की सूची में एक ऐप नहीं है, जो वे खुद को निर्धारित करते प्रतीत होते हैं (whatsapp, truecaller, आदि) डिफ़ॉल्ट रूप से विश्वसनीय हैं। )। यह एक
कॉडर स्वप्नदोष

3

अधिकांश आधुनिक एंड्रॉइड डिवाइस एक ऐप या तंत्र के साथ आते हैं, जो स्वचालित रूप से यह पता लगाने की कोशिश करते हैं कि बैटरी को कैसे बचाया जाए और परिणामस्वरूप कुछ पार्टी 3 ऐप को मार सकते हैं। इसका परिणाम अनुसूचित कार्यों और नौकरियों को हटाने में हो सकता है, (जैसे अलार्म बंद नहीं हो रहा है, अधिसूचना अधिसूचना काम नहीं कर रही है, आदि)। कई मामलों में यह एंड्रॉइड के बैटरी बचत तंत्र से पूरी तरह से स्वतंत्र होता है, मेरे मामले में मैं कुछ डिवाइस मॉडल का पता लगाने पर अधिक बैटरी अनुकूलन नहीं कर सका, मैं अपने एप्लिकेशन को श्वेतसूची में शुरू करने के लिए उपयोगकर्ता को पुनर्निर्देशित करता हूं

आप हर मॉडल के लिए इस लिंक में पाए गए इरादे से आपको https://android-arsenal.com/details/1/6771


2

<5.0 उपकरणों के लिए अलार्म मैनजर का उपयोग करें, और 5.0+ उपकरणों के लिए जॉबस्क्रिलर। मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि जॉबस्किड्यूलर निर्माता शेंनिगन द्वारा अप्रभावित रहेगा, लेकिन यह मेरे लिए बहुत कम संभावना है, यह देखते हुए कि एंड्रॉइड अलार्ममैन से और जॉबस्किड्यूलर से लोगों को दूर करने की कोशिश कर रहा है।

EDIT: Google इस समस्या का पहला समाधान लेकर आया है जिसे WorkManager कहा जाता है । यह कई शेड्यूलिंग चौखटे को अमूर्त करता है और डिवाइस के लिए सबसे उपयुक्त का उपयोग करता है।


2
दुर्भाग्य से, AlarmManager वर्ग के विपरीत, JobScheduler का उपयोग करते समय समय सटीक नहीं है। मेरे ऐप में, टाइमिंग सटीक होनी चाहिए :(
सर्जियो वियन्स

मैंने इसे एक कोशिश की और कुछ ऑप्टिमिज़ेटर्स (कम से कम सैमसंग) ने जॉबस्किड्यूलर में सभी लंबित कार्यों को मार डाला जब स्क्रीन बंद हो जाती है। तो यह भी टूट गया है। यह 5.0 पर होता है। 6.0 पर अद्यतन करने के बाद यह ठीक काम करता है, मुझे लगता है कि उन्होंने यह तय किया है। मैं अभी तक अन्य निर्माताओं के साथ इसका परीक्षण नहीं कर सका।
Sloy

सटीक समय के लिए आप पृष्ठभूमि सेवा या अनुसूचित सेवा का उपयोग नहीं कर सकते। आप एक अग्रभूमि सेवा की कोशिश कर सकते हैं, लेकिन यह उपयोगकर्ता (शायद अवांछनीय) के लिए एक निरंतर अधिसूचना बनाएगा और कुछ फोन में कार्य हत्यारों का निर्माण होता है, जो स्वचालित रूप से अग्रभूमि सेवा को नष्ट कर देगा। WorkManager सबसे अच्छा समाधान है लेकिन दुर्भाग्य से आपको सटीक समय नहीं मिलेगा।
टॉम

1

मैं भी है कि सेट alarms.The समाधान का उपयोग करने के लिए है वाला ऐप AlarmManager.setAlarmClock () एपीआई> = 21 इस afaik Doze से अप्रभावित है और सिस्टम ट्रे में एक अलार्म घड़ी आइकन डालने की अतिरिक्त बोनस है।


आपके उत्तर के लिए धन्यवाद। क्या अलार्म घड़ी आइकन को हटाने का कोई तरीका है?
सर्जियो विएड्स

दुर्भाग्य से, setAlarmClock कभी-कभी काम नहीं करता है। मैंने इसे ओरेओ डिवाइस पर कम मेमोरी के साथ परीक्षण किया।
बोरिस सालिमोव

0

आजकल के ज्यादातर नए फोन किसी न किसी तरह की बैटरी / पावर सेविंग मैनेजर से जुड़े होते हैं, जो आपके द्वारा बताए गए काम को करते हैं। डबस्टोर्स और क्लीन मास्टर्स की गिनती नहीं।

मुझे लगता है कि आपको ठीक से काम करने के लिए अपने ऐप / प्ले स्टोर लिस्टिंग में एक डिस्क्लेमर या फेक डालने की ज़रूरत है, जिसमें कहा गया है कि इस ऐप को आपके बैटरी मैनेजर ऐप के अपवाद में रखा जाना चाहिए।


इसे करने का एक और तरीका होना चाहिए ... उपयोगकर्ता अस्वीकरण नहीं पढ़ेंगे। मैं सोच भी नहीं सकता कि सैमसंग फोन एप्लिकेशन को
अलार्म मैनजर

अलार्म "समय पर" सक्रिय नहीं होगा, लेकिन वे eventuially होगा
Gavriel

यह (दुख की बात है) सबसे उपयोगी जवाब है, मैं कहूंगा। काश एक बेहतर समाधान होता, लेकिन हार्डवेयर निर्माता पूरी तरह से काम कर रहे वेनिला एंड्रॉइड को नुकसान पहुंचा रहे हैं।
कांव-कांव

0

मैंने थोड़ी देर पहले अलार्म मैनजर का उपयोग करना बंद कर दिया ... एक बेहतर और अधिक स्थिर विकल्प

  1. एक सेवा बनाएँ
  2. BOOT_COMPLETED के लिए एक ब्रॉडकास्टरर रजिस्टर करें
  3. रिसीवर से अपनी सेवा आग
  4. अपनी सेवा के अंदर एक नया हैंडलर शुरू करें जो हर X मिनट में खुद को लूप करे ( Android - समय-समय पर पोस्टडेलिड () कॉल ) का उपयोग करके एक विधि चला रहा है
  5. जांचें कि क्या कार्य निष्पादित करने का समय आ गया है: अब - निष्पादन समय> 0 ( जावा में दो तिथियों के बीच अंतर की अवधि कैसे पता करें? )
  6. यदि ऐसा है .. कार्य निष्पादित करें और हैंडलर बंद करें

हाँ .. यह एक दर्द है


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

मैंने यह नहीं कहा कि यह दृष्टिकोण BOOLETPROOF है, लेकिन कम से कम यह विभिन्न एपीआई संस्करणों से मिलकर बना है :)
ymz

मज़बूती से काम करने के लिए इस समाधान के लिए शायद वेक लॉक का भी उपयोग करना होगा और इससे बड़ी मात्रा में बैटरी खाएगी।
पावेल नाडोलस्की

मुझे लगता है कि आप इस एक पर सही हैं .. एकमात्र सवाल यह है: सबसे खराब क्या होगा - अविश्वसनीय कोड या खराब प्रदर्शन? किसी भी तरह, मुझे व्यक्तिगत रूप से लगता है कि लॉक के लिए वैकल्पिक तरीके हैं जो कुछ मामलों में उपयुक्त हो सकते हैं (उदाहरण के लिए: stackoverflow.com/questions/5346694/… )
ymz

0

क्या आप BOOT_COMPLETED के लिए सुन रहे हैं? डिवाइस को रिबूट करने पर आपको फिर से अलार्म सेट करना होगा।


हाँ। जैसा कि मैंने कहा, अलार्म 2012 से अब तक काम कर रहे थे। जब डिवाइस को रिबूट किया जाता है तो मैं BOOT_COMPLETED प्रसारण रिसीवर में फिर से शेड्यूल करता हूं।
सर्जियो विएड्स

1
अपने ऐप को फिर से काम करने के लिए रिबूट की आवश्यकता आधा समाधान भी नहीं है
टिम

1
@TimCastelijns ऐसा बिल्कुल नहीं है जो मैं कह रहा हूं। यदि डिवाइस को रिबूट किया गया है, अलार्म मैनेजर के साथ सेट किए गए सभी अलार्म को फिर से सेट किया जाना चाहिए।
टायलर पफ़्फ़

@TylerPfaff हाँ, लेकिन डिवाइस का पुनः आरंभ इस प्रश्न में समस्या से संबंधित नहीं है
टिम

0

एंड्रॉइड का कौन सा संस्करण चल रहा है?

एपीआई 23 के रूप में, ओएस खुद ही एक कम-पावर आइडल मोड में चला जाएगा जब इसे कुछ समय के लिए अप्रयुक्त किया गया होगा, और उस मोड में अलार्म वितरित नहीं किया जाएगा। ऐप्स के लिए स्पष्ट रूप से कहने का एक तरीका है "मुझे बैटरी के उपयोग की परवाह किए बिना इस समय इस अलार्म को बंद करने की आवश्यकता है"; नई AlarmManager विधियों को बुलाया setAndAllowWhileIdle()और setExactAndAllowWhileIdle()

आपके विवरण से ऐसा लगता है कि यह कुछ ओईएम के उपकरणों पर आपके मुद्दों का विशेष कारण नहीं हो सकता है, लेकिन यह कुछ ऐसा है जो अलार्म मैनेजर का उपयोग करने वाले सभी डेवलपर्स को पता होना चाहिए।

अंत में, जॉब शेड्यूलर के तंत्र का उपयोग करके अलार्म मैनेजर के कई उपयोग बेहतर तरीके से संबोधित किए जाते हैं। बैकवर्ड संगतता के लिए प्ले सर्विसेज "जीसीएम नेटवर्क मैनेजर" वास्तव में कार्यक्षमता में जॉब शेड्यूलर के बहुत करीब है - यह एंड्रॉइड के नए संस्करणों पर आंतरिक रूप से जॉब शेड्यूलर का उपयोग करता है - और जरूरी नहीं कि वर्ग के नाम के बावजूद, नेटवर्किंग के बारे में हो।


स्मार्ट मैनेजर वाले सैमसंग डिवाइस लॉलीपॉप पर चल रहे हैं। मैं पहले से ही Marshmallow उपकरणों के लिए setExactAndAllowWhileIdle का उपयोग कर रहा हूं। मैं JobScheduler और GCM पर एक नज़र डालूंगा। वैसे भी, मुझे नहीं पता कि समस्या यह है कि अलार्म बंद नहीं होगा, या यदि अलार्म बंद हो जाता है तो यह डिवाइस जागृत नहीं है।
सर्जियो विएड्स

0

मुझे नहीं लगता कि ऐप को मारने से अलार्म मैनेजर आपके ऐप को जाग्रत होने से रोकेगा।

इसका केवल तभी जब आप "स्टॉप स्टॉप" या ऐप को अलार्म मैनेजर से कॉल बैक प्राप्त नहीं करते हैं, को अक्षम करें।

मूल कारण कुछ और हो सकता है।

एम पर भी ... setExactAndAllowWhileIdle थ्रॉटलिंग करता है ... कि अगर यू एक अलार्म हर 2 मिनट इसे ट्रिगर नहीं किया जाएगा। ..जहां 15 मिनट की खिड़की होनी चाहिए। ।


1
आपके उत्तर के लिए धन्यवाद। लेकिन, यदि नहीं, तो स्मार्ट मैनेजर में "बैटरी ऑप्टिमाइज़ेशन" अक्षम होने पर ऐप पूरी तरह से काम क्यों कर रहा है?
सर्जियो विएड्स

क्या आप रूट किए गए डिवाइस पर ऐप चला रहे हैं..तो हाँ ऐप मैनेजर ऐप को भी डिसेबल कर सकता है ..
Rsesh jain

नहीं, मैं इसे रूट किए गए डिवाइस पर नहीं चला रहा हूं।
सर्जियो विएड्स

@rupeshjain "है कि अगर u हर 2 मिनट में एक अलार्म शेड्यूल करता है तो इसे ट्रिगर नहीं किया जाएगा। कहीं भी 15 मिनट की विंडो होना आवश्यक नहीं है।" यह पूरी तरह सच नहीं है, अगर यह सच था तो यह एक वास्तविक समस्या है। आप बिल्कुल ठीक पढ़ सकते हैं कि setExactAndAllowWhileIdle पद्धति के लिए Android डॉक्स के अंदर समय-निर्धारण की समय सीमा क्या है। इस बात पर प्रतिबंध है कि ये अलार्म किसी विशेष अनुप्रयोग के लिए कितनी बार बंद हो जाएंगे। सामान्य सिस्टम ऑपरेशन के तहत, यह इन अलार्मों को हर मिनट से अधिक नहीं भेजेगा, जब कम-शक्ति वाले निष्क्रिय मोड में यह अवधि 15 मिनट से अधिक हो सकती है।
नेत्रदान

0

Xiaomi के लिए आपको अपने ऐप के लिए AutoStart को सक्षम करना पड़ सकता है। मैं एंड्रॉइड संशोधनों की सूची (आमतौर पर फोन के निर्माता से) की कोशिश कर रहा हूं जो एक पृष्ठभूमि प्रक्रिया को प्रभावित कर सकता है। यदि आपके पास कुछ नया है, तो कृपया यहां एक उत्तर जोड़ें। Android कार्य हत्यारों की सूची


0

हमें ऐप मैनेजर में ऑटोस्टार्ट मैनेजर में अपना ऐप इनेबल करने की जरूरत है, कुछ हैंडसेट जैसे vivo v5,

Vivo v5 में, हम iManager में इस मेनू का पता लगा सकते हैं -> ऐप मैनेजर -> ऑटो स्टार्ट मैनेजर। हमारे एप्लिकेशन को यहां सक्षम करें।

यदि ऐप मारा जाता है या बंद हो जाता है तो आपका अलार्म / अलार्ममैन अलार्म चालू कर देगा।


0

मैं एक उत्तर की तलाश में था और कई घंटों के बाद मुझे यह मिला:

https://stackoverflow.com/a/35220476/3174791

रिज्यूम में यह जानने का तरीका है कि क्या आपका ऐप 'प्रोटेक्टेड ऐप्स' द्वारा मारा गया था और यह केवल Huawei डिवाइस पर काम करता है। मुझे बताएं कि क्या अन्य उपकरणों (सैमसंग, सोनी, श्याओमी, आदि) के लिए कोई समाधान है।


0

यह देर हो सकती है लेकिन मुझे आशा है कि यह किसी की मदद करता है।

मैं उसी समस्या पर इतने समय से अटका हुआ था। लेकिन अब मैंने सोचा कि इस समस्या को कैसे हल किया जाए। यह किसी के लिए भी है, जिसे समान समस्या हो सकती है। लोग कहते रहते हैं कि आपको ऑटोस्टार्ट को सक्षम करना होगा लेकिन मैंने ऑटो स्टार्ट का उपयोग करके इसे प्रबंधित किया।

सबसे पहले, WakeFullBroadcastaReceiver अब पदावनत कर दिया गया है और आपको ब्रॉडकास्टर का उपयोग करना चाहिए। सभी के लिए, आपको बैकग्राउंड सर्विस के बजाय फोरग्रेस्ड सर्विस का उपयोग करना होगा।

मैं आपको निम्नलिखित में उदाहरण दूंगा:

IntentService.class

public class NotificationService extends IntentService {


//In order to send notification when the app is close
//we use a foreground service, background service doesn't do the work.



public NotificationService() {
    super("NotificationService");
}

@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    //There is no difference in the result between start_sticky or start_not_sticky at the moment
    return START_NOT_STICKY;
}

@Override
protected void onHandleIntent(@Nullable Intent intent) {

    //TODO check if the app is in foreground or not, we can use activity lifecyclecallbacks for this

    startForegroundServiceT();
    sendNotification(intent);
    stopSelf();
}


/***
 * you have to show the notification to the user when running foreground service
 * otherwise it will throw an exception
 */
private void startForegroundServiceT(){

    if (Build.VERSION.SDK_INT >= 26) {
        String CHANNEL_ID = "my_channel_01";
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
                "Channel human readable title",
                NotificationManager.IMPORTANCE_DEFAULT);

        ((NotificationManager) 
   getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);

        Notification notification = new Notification.Builder(this, CHANNEL_ID)
                .setContentTitle("")
                .setContentText("").build();

        startForeground(1, notification);
    }
}

private void sendNotification(Intent intent){

    //Send notification
    //Use notification channle for android O+
}
}

BroadcastReceiver.class में अग्रभूमि सेवा शुरू करें

public class AlarmReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {


    Intent service = new Intent(context, NotificationService.class);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        context.startForegroundService(service);
    } else {
        context.startService(service);
    }

}
}

और इस तरह सेटआर्लम्स:

 public static void setAlarm(Context context, int requestCode, int hour, int minute){


    AlarmManager alarmManager =( AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context//same activity should be used when canceling the alarm
            , AlarmReceiver.class);
    intent.setAction("android.intent.action.NOTIFY");

    //setting FLAG_CANCEL_CURRENT makes some problems. and doest allow the cancelAlarm to work properly
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1001, intent, 0);

    Calendar time = getTime(hour, minute);

    //set Alarm for different API levels
    if (Build.VERSION.SDK_INT >= 23){
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pendingIntent);
    }
    else{
        alarmManager.set(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pendingIntent);
    }

फिर आपको प्रकट में रिसीवर और अग्रभूमि सेवा की घोषणा करनी होगी।

       <receiver android:name=".AlarmReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.NOTIFY">

            </action>
        </intent-filter>
    </receiver>
    <service
        android:name=".NotificationService"
        android:enabled="true"
        android:exported="true"></service>

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.