सामग्री पर जाएं
सभी पोस्ट

Android 16 Live Updates: Mintly के फोकस टाइमर को लॉक स्क्रीन पर लाना

Android 16 के प्रोग्रेस-केंद्रित नोटिफिकेशन की एक व्यावहारिक गाइड — ProgressStyle सेगमेंट, प्रमोटेड ऑनगोइंग नोटिफिकेशन, और ये एक चलते हुए Pomodoro टाइमर में क्या जोड़ते हैं।

MFKAPPS 5 मिनट पढ़ना

एक चलता हुआ टाइमर जो सिर्फ ऐप के अंदर रहता है, वह ऐसा टाइमर है जिसे कोई चेक ही नहीं करता। किसी Pomodoro सेशन का पूरा मतलब यही है कि आप उसे देखना बंद कर दें — जब आप सामने आते हैं तो लॉक स्क्रीन पर एक नज़र डालते हैं, देखते हैं कि कितना फोकस टाइम बचा है, और वापस काम पर लग जाते हैं। Android 16 आखिरकार ऑनगोइंग नोटिफिकेशन के लिए इस एक नज़र का असली जवाब देता है: Live Updates, ProgressStyle के इर्द-गिर्द बना एक प्रमोटेड नोटिफिकेशन टाइप, जो शेड में गुम होने की बजाय लॉक स्क्रीन पर जगह और स्टेटस बार में एक कॉम्पैक्ट चिप हासिल करता है। यहाँ बताया गया है कि यह असल में क्या करता है, और इसने उस नोटिफिकेशन को कैसे बदला जो Mintly एक सेशन के दौरान दिखाता है।

एक Live Update एक सामान्य ऑनगोइंग नोटिफिकेशन की तुलना में क्या जोड़ता है

एक ऑनगोइंग, न हटाई जा सकने वाली नोटिफिकेशन जिसमें प्रोग्रेस बार हो, Android पर सालों से काम कर रही है — इससे पहले Mintly का टाइमर नोटिफिकेशन इसी तरह काम करता था। जो चीज़ इसे नहीं मिलती थी वह थी प्राथमिकता वाली जगह। एक सामान्य ऑनगोइंग नोटिफिकेशन शेड में बाकी सब चीज़ों के साथ बैठी रहती है, और भरी हुई नोटिफिकेशन लिस्ट वाले फोन पर, यह कई लाइनों में से एक होती है।

एक Live Update, वही कंटेंट देने के लिए बस एक Notification.Builder कॉल जितना ही अलग है, लेकिन सिस्टम इसे अलग तरह से ट्रीट करता है: यह लॉक स्क्रीन पर दिखने के योग्य होता है भले ही बाकी नोटिफिकेशन collapsed हों, और सपोर्टेड डिवाइसों पर यह स्टेटस बार की घड़ी के पास एक छोटी लाइव चिप के रूप में दिख सकता है। यह प्रमोटेड प्लेसमेंट असल में देना है या नहीं, यह फैसला सिस्टम करता है — रिक्वेस्ट करने से इसकी गारंटी नहीं मिलती — लेकिन जिन नोटिफिकेशन टाइप्स के लिए Android ने इसे डिज़ाइन किया (पास आती हुई राइड, रास्ते में डिलीवरी, गिनती करता टाइमर), उनके लिए यह “यूज़र को अनलॉक करके शेड नीचे खींचना पड़ता है” और “यूज़र बिना कुछ छुए लॉक स्क्रीन पर ही पढ़ लेता है” के बीच का फर्क है।

ProgressStyle को टाइमर नोटिफिकेशन में जोड़ना

स्टाइल खुद, जो नोटिफिकेशन आप पहले से बना रहे हैं उस पर एक छोटा-सा जोड़ है:

val progressStyle = NotificationCompat.ProgressStyle()
    .setProgress(elapsedSeconds)
    .setProgressMax(totalSeconds)
    .setProgressIndeterminate(false)

val notification = NotificationCompat.Builder(context, CHANNEL_FOCUS_SESSION)
    .setContentTitle("Focus session")
    .setContentText(formatRemaining(totalSeconds - elapsedSeconds))
    .setSmallIcon(R.drawable.ic_mintly_timer)
    .setOngoing(true)
    .setOnlyAlertOnce(true)
    .setStyle(progressStyle)
    .setRequestPromotedOngoing(true)
    .build()

एक सेटिंग जिस पर रुककर सोचने लायक है वह है setRequestPromotedOngoing(true)। यह एक रिक्वेस्ट है, कोई स्विच नहीं — प्लेटफ़ॉर्म इसे मना कर सकता है, और यह उन नोटिफिकेशन के लिए बनाई गई है जो असल में कुछ ऐसा दर्शाती हैं जिसका यूज़र अभी सक्रिय रूप से इंतज़ार कर रहा है, न कि कतार में आगे कूदने का कोई आम तरीका। एक टाइमर जो वाकई चल रहा है, इसके लायक है। दस मिनट पहले खत्म हुए सेशन से बची कोई पुरानी नोटिफिकेशन इसके लायक नहीं है, और प्लेटफ़ॉर्म की अपनी हेयुरिस्टिक्स उस ऐप से आने वाली प्रमोशन रिक्वेस्ट को नज़रअंदाज़ करना शुरू कर देंगी जो तब यह मांगती है जब असल में कुछ भी चल नहीं रहा होता।

सेगमेंट एक बार को एक असली सेशन मैप में बदल देते हैं

Mintly के लिए इसे अपनाने लायक जो चीज़ बनी, वह अकेले लॉक स्क्रीन प्लेसमेंट नहीं थी — वह थी ProgressStyle का सेगमेंट सपोर्ट। एक लगातार चलने वाली सिंगल बार की बजाय, आप प्रोग्रेस को रंगीन रेंज की एक सीरीज़ के रूप में बता सकते हैं, जो ठीक उसी तरह मेल खाता है जैसे एक Pomodoro सेशन असल में बना होता है: वर्क ब्लॉक, छोटा ब्रेक, वर्क ब्लॉक, लंबा ब्रेक।

val segments = listOf(
    ProgressStyle.Segment(25 * 60).setColor(mintlyFocusColor),
    ProgressStyle.Segment(5 * 60).setColor(mintlyBreakColor),
    ProgressStyle.Segment(25 * 60).setColor(mintlyFocusColor),
    ProgressStyle.Segment(15 * 60).setColor(mintlyLongBreakColor),
)

progressStyle.setProgressSegments(segments)

यह एक बदलाव उस सवाल का जवाब देता है जो पुरानी फ्लैट प्रोग्रेस बार कभी नहीं दे पाती थी — सिर्फ “इस सेशन में कितना समय बचा है” ही नहीं, बल्कि “मैं साइकल में कहाँ हूँ, और अगले असली ब्रेक तक कितनी दूरी है”। पॉइंट्स ProgressStyle का दिया हुआ दूसरा प्राथमिक तत्व हैं — बार के साथ-साथ छोटे मार्कर — और ये इंटरप्शन चेकपॉइंट्स के लिए स्वाभाविक रूप से फिट बैठते हैं, हालांकि Mintly इन्हें अभी इस्तेमाल नहीं करता।

फेलियर मोड: इसे सजावट की तरह ट्रीट करना

ProgressStyle और प्रमोशन रिक्वेस्ट को किसी ऐप की हर ऑनगोइंग नोटिफिकेशन पर चिपका देने का मन कर सकता है, क्योंकि API की सतह छोटी है और विज़ुअल अपग्रेड असली है। यह गलत instinct है। Live Updates एक सीमित कैटेगरी के लिए मौजूद है — कुछ ऐसा जो समय से बंधा हो और असल में चल रहा हो, जिसकी परवाह यूज़र को अभी हो — और प्लेटफ़ॉर्म उन ऐप्स पर नज़र रखता है जो इस कैटेगरी के बाहर प्रमोशन मांगती हैं। एक ऐप जो “आपने इसे 3 दिन से नहीं खोला” जैसे नज को प्रोग्रेस बार की तरह सजाकर प्रमोट करती है, वह ठीक वही मिसयूज़ केस है जिसे रोकने के लिए यह फीचर बनाया गया था, और बार-बार की गई गलत रिक्वेस्ट किसी ऐप की भविष्य की प्रमोशन रिक्वेस्ट को चुपचाप कम प्राथमिकता वाली बना सकती हैं।

setRequestPromotedOngoing(true) कहीं भी जोड़ने से पहले का ईमानदार टेस्ट यह है: क्या इस नोटिफिकेशन के पीछे वाकई कोई चल रही प्रोसेस है, जो किसी ऐसे तय समय पर खत्म होती है जिसका अंदाज़ा यूज़र बार से ही लगा सकता है? एक फोकस टाइमर के लिए, हर मायने में हाँ है। एक आम लोकल-फर्स्ट ऐप में बाकी ज़्यादातर नोटिफिकेशन टाइप्स के लिए, नहीं — और जो सादी नोटिफिकेशन आपके पास पहले से है, वही बनाए रखने लायक सही चीज़ है।

यह किसकी जगह नहीं लेता

Live Updates बदलता है कि टाइमर नोटिफिकेशन कहाँ दिखाई देती है। यह इसे नहीं बदलता कि यह पहली जगह भरोसेमंद तरीके से फायर होती है या नहीं — वह अब भी फोरग्राउंड सर्विस और वॉल-क्लॉक एंड-टाइम गणित का मामला है, जिन पर Mintly Doze और प्रोसेस डेथ से बचने के लिए पहले से निर्भर है। ProgressStyle और प्रमोशन रिक्वेस्ट इसी बुनियाद के ऊपर टिके हैं; ये एक प्रेजेंटेशन लेयर हैं, अंडरलाइंग टाइमर को सही बनाने का विकल्प नहीं। पहले भरोसेमंद वर्ज़न बनाएं। लॉक स्क्रीन चिप तब जोड़ने लायक है जब वह अब कोई सवाल न रहे — उससे पहले नहीं।

// संबंधित पठन

जर्नल से और भी

MFKAPPS 6 मिनट पढ़ना

2026 में Android पर फोरग्राउंड सर्विस टाइप्स: वह चुनना जो आपके फीचर पर सच में लागू हो

Android के फोरग्राउंड सर्विस टाइप प्रतिबंधों की एक व्यावहारिक गाइड — dataSync, mediaPlayback, specialUse, shortService — और बिना मारे या रिजेक्ट हुए सही वाला कैसे चुनें।

#android #engineering #kotlin
MFKAPPS 6 मिनट पढ़ना

2026 में Android नोटिफ़िकेशन चैनल: ऐसे महत्व स्तर डिज़ाइन करना जिन्हें यूज़र म्यूट न करें

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

#android #engineering #notifications
MFKAPPS 6 मिनट पढ़ना

Mintly बनाना: जब Android प्रोसेस को मारना चाहता है तब भी फोकस टाइमर को सटीक रखना

चल रहे Pomodoro टाइमर की विश्वसनीयता की समस्या एक बार वाले रिमाइंडर से ज़्यादा कठिन होती है। जानिए कैसे Mintly एक फोरग्राउंड सर्विस और वॉल-क्लॉक एंड टाइम की मदद से Doze, प्रोसेस डेथ और स्क्रीन-ऑफ ड्रिफ्ट से बचता है।

#android #engineering #mobile