Skip to Content
मूल अवधारणाएँओईएम पावर प्रबंधन

ओईएम पावर प्रबंधन

आक्रामक बैटरी बचतकर्ताओं को नियंत्रित करना

भले ही आप सबकुछ पूरी तरह से कॉन्फ़िगर करते हैं और POST_NOTIFICATIONS के साथ फ़ोरग्राउंड सेवा का अनुरोध करते हैं, कुछ एंड्रॉइड निर्माताओं (ओईएम) ने अपने कस्टम एंड्रॉइड फोर्क्स (जैसे एमआईयूआई, ईएमयूआई, कलरओएस) में मालिकाना, अत्यधिक आक्रामक “बैटरी सेवर” इंजन बनाए हैं।

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

समर्थित निर्माता और व्यवहार

ट्रैसलेट 100+ से अधिक ओईएम-विशिष्ट आशय संरचनाओं की आंतरिक रजिस्ट्री बनाए रखता है। जब आप Tracelet.showPowerManager() पर कॉल करते हैं, तो इंजन स्वचालित रूप से डिवाइस ब्रांड का पता लगाता है और सही डीप-लिंक सक्रिय करता है।

यहां वे प्राथमिक OEM हैं जिनका हम समर्थन करते हैं और showPowerManager() क्या खुलता है:

📱 Xiaomi/POCO/Redmi (MIUI/HyperOS)

  • समस्या: MIUI में एक बेहद सख्त “ऑटोस्टार्ट” प्रबंधक और एक “बैटरी सेवर” है जो 5 मिनट की नींद के बाद पृष्ठभूमि सेवाओं को बंद कर देता है।
  • क्या ट्रैसलेट खुलता है:
  1. छिपा हुआ ऑटोस्टार्ट मेनू (उपयोगकर्ता को आपके ऐप को चालू करना होगा)।
  2. विशिष्ट ऐप बैटरी सेवर मेनू (उपयोगकर्ता को “कोई प्रतिबंध नहीं” का चयन करना होगा)।

📱 हुआवेई / ऑनर (ईएमयूआई)

  • समस्या: EMUI का “ऐप लॉन्च” प्रबंधक ऐप्स को तब तक बंद कर देता है जब तक कि उन्हें स्पष्ट रूप से मैन्युअल रूप से प्रबंधित करने के लिए सेट न किया गया हो।
  • क्या ट्रैसलेट खुलता है: ऐप लॉन्च सेटिंग स्क्रीन। उपयोगकर्ता को आपके ऐप को अनचेक करना होगा और सुनिश्चित करना होगा कि “ऑटो-लॉन्च”, “सेकेंडरी लॉन्च”, और “रन इन बैकग्राउंड” सभी सक्षम हैं।

📱 सैमसंग (वनयूआई)

  • समस्या: सैमसंग आक्रामक रूप से अपनी “डीप स्लीपिंग ऐप्स” सूची में ऐप्स जोड़ता है, यदि वे कुछ दिनों में नहीं खोले गए हैं, तो सभी पृष्ठभूमि निष्पादन को स्थायी रूप से बंद कर देता है।
  • क्या ट्रैसलेट खुलता है: अनमॉनिटर्ड / नेवर स्लीपिंग ऐप्स मेनू, उपयोगकर्ता को आपके ऐप को स्थायी श्वेतसूची में जोड़ने की अनुमति देता है।

📱 वनप्लस / ओप्पो (ऑक्सीजनओएस / कलरओएस)

  • समस्या: आक्रामक “ऐप बैटरी प्रबंधन” जो पृष्ठभूमि कार्यों को स्वचालित रूप से अनुकूलित करता है।
  • क्या ट्रैसलेट खुलता है: ऐप ऑटो-लॉन्च और बैटरी ऑप्टिमाइज़ेशन स्क्रीन।

📱 विवो (फनटच ओएस)

  • समस्या: ऐप्स को पृष्ठभूमि में उच्च शक्ति का उपभोग करने से प्रतिबंधित करता है।
  • क्या ट्रैसलेट खुलता है: उच्च पृष्ठभूमि बिजली की खपत श्वेतसूची मेनू।

🌐 अन्य डिवाइस और DontKillMyApp

उन उपकरणों के लिए जो स्पष्ट रूप से ट्रैसलेट के डीप-लिंक इंजन द्वारा कवर नहीं किए गए हैं, या यदि आप विशिष्ट निर्माताओं द्वारा लगाए गए सटीक तकनीकी बाधाओं को समझना चाहते हैं, तो हम अत्यधिक अनुशंसा करते हैं कि DontKillMyApp.com  की जाँच करें। यह एक अविश्वसनीय समुदाय-संचालित संसाधन है जो स्मार्टफोन को उनकी पृष्ठभूमि कार्य आक्रामकता के आधार पर रैंक करता है और लगभग हर एंड्रॉइड डिवाइस के लिए मैन्युअल कॉन्फ़िगरेशन चरण प्रदान करता है।


शमन प्रवाह को लागू करना

आपको यह जांच अपने ऐप के ऑनबोर्डिंग प्रवाह के दौरान या मुख्य डैशबोर्ड पर चलानी चाहिए:

import 'package:tracelet/tracelet.dart' as tl; // 1. Check the device health // Returns a Map<String, dynamic> containing the boolean flags final health = await tl.Tracelet.getSettingsHealth(); // 2. Check if the device is a known aggressive OEM if (health['isAggressiveOem'] == true) { // 3. Check if the user has already whitelisted your app if (health['isIgnoringBatteryOptimizations'] == false) { // 4. Show a custom Flutter dialog explaining WHY they need to do this showDialog( context: context, builder: (context) => AlertDialog( title: Text("Background Tracking Required"), content: Text("To ensure your route is recorded, please select 'No Restrictions' on the next screen."), actions: [ TextButton( onPressed: () async { Navigator.pop(context); // 5. Open the specific manufacturer's hidden power menu // Returns true if the intent successfully launched the screen, false otherwise. final success = await tl.Tracelet.showPowerManager(); if (!success) { // Fallback: Open standard Android battery settings await tl.Tracelet.openBatterySettings(); } }, child: Text("Configure"), ) ] ) ); } }

UX सर्वोत्तम अभ्यास: कभी भी ऐप लॉन्च होने पर या तुरंत showPowerManager() पर कॉल न करें। इसके पहले हमेशा अत्यधिक प्रासंगिक स्पंदन यूआई संवाद रखें। यदि उपयोगकर्ता को बिना संदर्भ के अचानक एक डरावनी “बैटरी ऑप्टिमाइज़ेशन” सिस्टम स्क्रीन पर टेलीपोर्ट किया जाता है, तो वे घबरा जाएंगे और आपके ऐप को अनइंस्टॉल कर देंगे।


वास्तविक समय चालक/बेड़ा ट्रैकिंग विश्वसनीयता

टैक्सी, डिलीवरी और फ्लीट ऐप्स बनाने वाली टीमों का सबसे आम सवाल है: “क्या ट्रेसलेट पूरे दिन Xiaomi, Poco, Infinix, Tecno और अन्य आक्रामक OEM पर नज़र रख सकता है?” यहां ईमानदार, व्यावहारिक उत्तर है।

ट्रैसलेट स्वचालित रूप से क्या संभालता है

ये शमन आपके लिए लागू हैं - किसी कॉन्फ़िगरेशन की आवश्यकता नहीं है:

  • FOREGROUND_SERVICE_TYPE_LOCATION के साथ फ़ोरग्राउंड सेवा - सर्वोच्च पृष्ठभूमि प्राथमिकता वाला Android अनुदान।
  • START_STICKY - मेमोरी-दबाव खत्म होने के बाद ओएस सेवा को फिर से बनाता है।
  • ओईएम-सुरक्षित वैकलॉक - हुआवेई पर, पॉवरजीनी द्वारा श्वेतसूचीबद्ध एक वैकलॉक टैग ताकि “अज्ञात” वैकलॉक रखने के कारण प्रक्रिया समाप्त न हो जाए।
  • बूट-रिसीवर वैकलॉक - BOOT_COMPLETED के दौरान एक छोटा वैकलॉक ताकि रिबूट के बाद अग्रभूमि सेवा स्थापित होने तक प्रक्रिया बनी रहे।
  • उपभोक्ता प्रोगार्ड/आर8 नियम - रिलीज़ बिल्ड को सेवाओं, रिसीवर्स और रूम इकाइयों को अलग करने से रोकता है।

अपरिहार्य मैन्युअल कदम

उपयोगकर्ता द्वारा ऐप को व्हाइटलिस्ट किए बिना कोई भी बैकग्राउंड-लोकेशन लाइब्रेरी OEM किल को ओवरराइड नहीं कर सकती है। MIUI, EMUI, ColorOS, HiOS/XOS और इसी तरह के ROM जानबूझकर मानक एंड्रॉइड नियमों की अनदेखी करते हैं। इन उपकरणों पर, बैटरी-ऑप्टिमाइज़ेशन छूट + ऑटोस्टार्ट पूरे दिन की विश्वसनीयता के लिए कठिन आवश्यकताएं हैं - उन्हें आवश्यक ऑनबोर्डिंग चरणों के रूप में मानें, न कि वैकल्पिक अतिरिक्त के रूप में।

छूट पर ड्राइवर की शिफ्ट की शुरुआत गेट:

final ignoring = await tl.Tracelet.isIgnoringBatteryOptimizations(); final health = await tl.Tracelet.getSettingsHealth(); if (health['isAggressiveOem'] == true && !ignoring) { // Walk the user through showPowerManager() + battery-optimization exemption // BEFORE letting them go "on shift". }

यह पता लगाना कि ओईएम ने कब ट्रैकिंग को थ्रॉटल या खत्म कर दिया है

  • Tracelet.getHealth() - एक कॉल ऑटो-डिटेक्टेड चेतावनियों के साथ ट्रैकिंग स्थिति, प्रदाता स्थिति, अनुमति/प्राधिकरण, पावर-सेव मोड, बैटरी-ऑप्टिमाइज़ेशन छूट और लंबित अनसिंक गिनती लौटाता है। “डिवाइस हेल्थ” डैशबोर्ड के लिए बिल्कुल उपयुक्त।
  • onProviderChange घटनाएँ - स्थान सेवाएँ / जीपीएस स्थिति बदलने पर सक्रिय हो जाती हैं।
  • बैकएंड स्टेलनेस वॉचडॉग - प्रत्येक फिक्स टाइमस्टैम्प्ड और कायम रहता है, इसलिए प्रत्येक डिवाइस के अंतिम फिक्स टाइम की तुलना अपने सर्वर पर अपेक्षित ताल से करें और एक डिवाइस को चिह्नित करें जिसकी स्ट्रीम मिनटों के भीतर चुप हो गई (ओईएम किल का क्लासिक हस्ताक्षर)।

पूरे दिन की ट्रैकिंग के लिए अनुशंसित सेटअप चेकलिस्ट

  1. स्पष्ट तर्क प्रवाह के साथ Always / पृष्ठभूमि स्थान अनुमति का अनुरोध करें।
  2. एक एक चालू अधिसूचना के साथ अग्रभूमि सेवा चलाएँ - निरंतर ट्रैकिंग के लिए गैर-परक्राम्य।
  3. stopOnTerminate: false और startOnBoot: true सेट करें ताकि ट्रैकिंग ऐप बंद होने और रीबूट होने से बचे रहे।
  4. ऑनबोर्डिंग के दौरान, getSettingsHealth() पर कॉल करें; यदि isAggressiveOem सत्य है, तो उपयोगकर्ता को showPowerManager() और बैटरी-अनुकूलन छूट के माध्यम से बताएं। isIgnoringBatteryOptimizations() पर गेट शिफ्ट-स्टार्ट।
  5. HTTP सिंक (बैच अपलोड) का उपयोग करें ताकि संक्षिप्त नेटवर्क अंतराल कभी भी डेटा न खोएं।
  6. एक बैकएंड स्टैलेनेस वॉचडॉग जोड़ें ताकि ऑपरेशन में डिवाइस जल्दी से डार्क हो जाए।
  7. tracelet_doctor (या getHealth()) को एक छिपी हुई समर्थन स्क्रीन में शिप करें ताकि फ़ील्ड समस्याओं का वास्तविक उपकरणों पर निदान किया जा सके।

क्योंकि पृष्ठभूमि विश्वसनीयता डिवाइस- और ROM-संस्करण विशिष्ट है, सबसे भरोसेमंद “केस स्टडी” आपके वास्तविक लक्ष्य डिवाइस मिश्रण पर एक दिन के लिए उदाहरण ऐप + tracelet_doctor चला रहा है - जो वास्तविक दुनिया के व्यवहार को किसी भी व्यापक दावे से कहीं बेहतर दर्शाता है।