सटीक अलार्म, उपयोगकर्ता की तरफ़ से सूचनाएं पाने या ऐसी कार्रवाइयां करने के लिए होते हैं जिन्हें तय समय पर करना ज़रूरी होता है.
SCHEDULE_EXACT_ALARM
, Android 12 में ऐप्लिकेशन को सटीक अलार्म शेड्यूल करने के लिए दी गई अनुमति, अब Android 13 और उसके बाद के वर्शन को टारगेट करने वाले ज़्यादातर नए ऐप्लिकेशन के लिए पहले से नहीं दी जा रही है. यह अनुमति डिफ़ॉल्ट रूप से 'अनुमति नहीं दी गई' पर सेट होगी. अगर आपने
जब कोई उपयोगकर्ता, Android 14 वर्शन वाले डिवाइस पर ऐप्लिकेशन का डेटा ट्रांसफ़र करता है, तो
बैकअप लेने और वापस लाने की कार्रवाई होती है, तो अनुमति अब भी अस्वीकार रहेगी. अगर कोई
मौजूदा ऐप्लिकेशन के पास यह अनुमति पहले से है, तो डिवाइस पर इसे पहले से मंज़ूरी दे दी जाएगी
Android 14 में अपग्रेड किया जा सकता है.
सटीक समय वाले अलार्म चालू करने के लिए, SCHEDULE_EXACT_ALARM
की अनुमति ज़रूरी है
इन एपीआई के ज़रिए या SecurityException
को फेंकें:
SCHEDULE_EXACT_ALARM
अनुमति के लिए मौजूदा सबसे सही तरीके अब भी
जिनमें नीचे दी गई शर्तें भी शामिल हैं:
- एग्ज़ैक्ट अलार्म शेड्यूल करने से पहले,
canScheduleExactAlarms()
की मदद से अनुमति देखें. - अपने ऐप्लिकेशन को सेट अप करें, ताकि वह फ़ोरग्राउंड ब्रॉडकास्ट पर कॉन्टेंट को सुन सके और उस पर ठीक से प्रतिक्रिया दे सके
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
जिसे उपयोगकर्ता की अनुमति मिलने पर सिस्टम भेजता है.
ऐसे ऐप्लिकेशन की संख्या जिन पर गड़बड़ी का असर पड़ा
अगर किसी डिवाइस में Android 14 या इसके बाद वाला वर्शन चल रहा है, तो यह बदलाव इंस्टॉल किया गया ऐसा ऐप्लिकेशन जिसकी विशेषताएं हैं:
- Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन को टारगेट करता हो.
- मेनिफ़ेस्ट में
SCHEDULE_EXACT_ALARM
अनुमति का एलान करता है. - छूट या पहले से छूट के तहत नहीं आता हो स्थिति के हिसाब से बदलें.
- यह कैलेंडर या अलार्म घड़ी वाला ऐप्लिकेशन नहीं है.
कैलेंडर और अलार्म क्लॉक ऐप्लिकेशन को USE_EXACT_ALARM का एलान करना चाहिए
कैलेंडर या अलार्म घड़ी वाले ऐप्लिकेशन को कैलेंडर रिमाइंडर, जागने के लिए अलार्म या सूचनाएं भेजनी होंगी, भले ही ऐप्लिकेशन बंद हो. ये ऐप्लिकेशन, USE_EXACT_ALARM
सामान्य अनुमति का अनुरोध कर सकते हैं. ऐप्लिकेशन इंस्टॉल करने पर, उसे USE_EXACT_ALARM
अनुमति दी जाएगी. इस अनुमति वाले ऐप्लिकेशन, SCHEDULE_EXACT_ALARM
अनुमति वाले ऐप्लिकेशन की तरह ही सटीक अलार्म शेड्यूल कर पाएंगे.
ऐसे इस्तेमाल के उदाहरण जिनमें सटीक समय वाले अलार्म की ज़रूरत नहीं पड़ सकती
ऐसा इसलिए हुआ, क्योंकि अब SCHEDULE_EXACT_ALARM
की अनुमति डिफ़ॉल्ट रूप से अस्वीकार कर दी गई है और
अनुमति देने की प्रक्रिया में लोगों को कुछ और चरण पूरे करने होते हैं. इसलिए, डेवलपर को
हम इसके इस्तेमाल के उदाहरणों का आकलन करते हैं. साथ ही, यह तय करते हैं कि सटीक अलार्म सेट करने हैं या नहीं
जो उनके काम के हों.
यहां ऐसे सामान्य वर्कफ़्लो की सूची दी गई है जिनके लिए शायद एग्ज़ैक्ट अलार्म की ज़रूरत न हो:
- अपने ऐप्लिकेशन के लाइफ़टाइम के दौरान, बार-बार होने वाले काम को शेड्यूल करना
set()
तरीका तब काम का होता है, जब टास्क को रीयल-टाइम में होने वाली पाबंदियों को ध्यान में रखना पड़ता है. जैसे, कल दोपहर 2:00 बजे या 30 मिनट में बंद होना. अगर ऐसा नहीं है, तो हमारा सुझाव है किpostAtTime()
याpostDelayed()
का इस्तेमाल करें.- बैकग्राउंड में होने वाले शेड्यूल किए गए काम, जैसे कि ऐप्लिकेशन को अपडेट करना और लॉग अपलोड करना
WorkManager
की मदद से, समय के हिसाब से बार-बार होने वाले काम को शेड्यूल किया जा सकता है. आपके पास इंटरवल और फ़्लेक्स इंटरवल (कम से कम 15 मिनट) तय करने का विकल्प है काम के लिए विस्तृत रनटाइम तय करें.- सिस्टम के इस्तेमाल में न होने पर, अलार्म को तय समय पर बंद करना
- असटीक समय वाले अलार्म का इस्तेमाल करना. खास तौर पर,
setAndAllowWhileIdle()
पर कॉल करें. - उपयोगकर्ता की बताई गई ऐसी कार्रवाई जो किसी तय समय के बाद होनी चाहिए
- बिलकुल सटीक जानकारी न देने वाले अलार्म का इस्तेमाल करें. खास तौर पर,
set()
पर कॉल करें. - उपयोगकर्ता की ओर से तय की गई ऐसी कार्रवाई जो एक तय समयसीमा में हो सकती है
- बिलकुल सटीक जानकारी न देने वाले अलार्म का इस्तेमाल करें. खास तौर पर,
setWindow()
पर कॉल करें. ध्यान दें कि विंडो को रीलॉन्च करने में लगने वाला कम से कम समय 10 मिनट है.
सटीक समय वाले अलार्म का इस्तेमाल जारी रखने के लिए, माइग्रेशन के चरण
कम से कम, ऐप्लिकेशन को यह देखना चाहिए कि सटीक समय वाले अलार्म शेड्यूल करने से पहले, उनके पास अनुमति है या नहीं. अगर ऐप्लिकेशन को अनुमति नहीं है, तो उन्हें इसका अनुरोध करना होगा उपयोगकर्ता से किसी इंटेंट के ज़रिए अनुरोध करके.
यह खास अनुमति का अनुरोध करने के लिए स्टैंडर्ड वर्कफ़्लो जैसा ही है:
- पुष्टि करने के लिए, ऐप्लिकेशन को
AlarmManager.canScheduleExactAlarms()
को कॉल करना होगा कि उसमें उचित अनुमति है. अगर ऐप्लिकेशन के पास अनुमति नहीं है, तो उपयोगकर्ताओं से अनुमति देने के लिए कहने के लिए, ऐप्लिकेशन के पैकेज के नाम के साथ-साथ
ACTION_REQUEST_SCHEDULE_EXACT_ALARM
को शामिल करने वाला इंटेंट शुरू करें.onResume()
तरीके में उपयोगकर्ता का फ़ैसला देखें है.उपयोगकर्ता की अनुमति मिलने पर भेजे गए
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
ब्रॉडकास्ट को सुनें.अगर उपयोगकर्ता ने आपके ऐप्लिकेशन को अनुमति दी है, तो आपका ऐप्लिकेशन एग्ज़ैक्ट अलार्म सेट कर सकता है. अगर उपयोगकर्ता ने इसके बजाय अनुमति नहीं दी है, तो शुक्रिया अंदाज़ में अपने ऐप अनुभव ताकि यह बिना अनुमति वाले उपयोगकर्ता से संपर्क करने के लिए कहें.
नीचे दिया गया कोड स्निपेट,
SCHEDULE_EXACT_ALARM
अनुमति:
val alarmManager: AlarmManager = context.getSystemService<AlarmManager>()!!
when {
// If permission is granted, proceed with scheduling exact alarms.
alarmManager.canScheduleExactAlarms() -> {
alarmManager.setExact(...)
}
else -> {
// Ask users to go to exact alarm page in system settings.
startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}
}
onResume()
में अनुमति की जांच करने और उपयोगकर्ता के फ़ैसलों को मैनेज करने के लिए सैंपल कोड:
override fun onResume() {
…
if (alarmManager.canScheduleExactAlarms()) {
// Set exact alarms.
alarmManager.setExact(...)
}
else {
// Permission not yet approved. Display user notice and revert to a fallback
// approach.
alarmManager.setWindow(...)
}
}
अनुमति न मिलने पर ग्रेसफ़ुल डिग्रेडेशन
कुछ उपयोगकर्ता अनुमति देने से इंकार कर देंगे. इस स्थिति में, हमारा सुझाव है कि ऐप्लिकेशन, उपयोगकर्ता अनुभव को बेहतर तरीके से खराब करें. साथ ही, अपने इस्तेमाल के उदाहरणों की पहचान करके, उपयोगकर्ता को सबसे अच्छा फ़ॉलबैक अनुभव देने की कोशिश करें.
मुक्तियाँ
इस तरह के ऐप्लिकेशन को हमेशा setExact()
को कॉल करने की अनुमति है या
setExactAndAllowWhileIdle()
तरीके:
- ऐप्लिकेशन, प्लैटफ़ॉर्म सर्टिफ़िकेट से साइन किए गए हैं.
- खास अधिकार वाले ऐप्लिकेशन.
- वे ऐप्लिकेशन जो पावर ऐलवेलिस्ट में शामिल हैं. अगर आपका ऐप्लिकेशन ज़रूरी शर्तें पूरी करता है, तो
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
इंटेंट ऐक्शन का इस्तेमाल करके, इसका अनुरोध किया जा सकता है.
मंज़ूरी मिलने से पहले
SYSTEM_WELLBEING
की भूमिका वाले लोगों को पहले से हीSCHEDULE_EXACT_ALARM
दिया जाएगा.
टेस्ट से जुड़े दिशा-निर्देश
इस बदलाव का परीक्षण करने के लिए, अलार्म और आपके ऐप्लिकेशन के लिए रिमाइंडर ऐक्सेस करने की अनुमति सिस्टम सेटिंग में ऐप्लिकेशन के लिए खास ऐक्सेस पेज से (सेटिंग > ऐप्लिकेशन > ऐप्लिकेशन के लिए खास ऐक्सेस > अलार्म और रिमाइंडर) देखें और अपने ऐप्लिकेशन के व्यवहार के बारे में जानें.