शॉर्टकट बनाने के बाद, आपको अपने ऐप्लिकेशन के लाइफ़टाइम के दौरान उन्हें मैनेज करना पड़ सकता है. उदाहरण के लिए, हो सकता है कि आप अपने ऐप्लिकेशन को ऑप्टिमाइज़ करना चाहें. इसके लिए, आपको यह तय करना होगा कि आपके उपयोगकर्ता, आपके शॉर्टकट की मदद से कितनी बार खास कार्रवाइयां पूरी करते हैं. किसी अन्य मामले में, पिन किए गए शॉर्टकट को बंद किया जा सकता है, ताकि आपके ऐप्लिकेशन को पुराने या मौजूद न होने वाले ऐक्शन करने से रोका जा सके. बातचीत में इस्तेमाल किए गए शॉर्टकट के लिए, आपको उनके इस्तेमाल को ट्रैक करना पड़ सकता है. इससे आपको ऐसे सिग्नल मिलेंगे जिनसे शॉर्टकट की रैंकिंग को बेहतर बनाया जा सकता है.
इस पेज पर, शॉर्टकट मैनेज करने के इन तरीकों के साथ-साथ कई अन्य सामान्य तरीकों के बारे में बताया गया है.
शॉर्टकट का व्यवहार
यहां दिए गए सेक्शन में, शॉर्टकट के काम करने के तरीके के बारे में सामान्य जानकारी दी गई है. इसमें शॉर्टकट दिखने, उनके दिखने के क्रम, और रैंक के बारे में जानकारी शामिल है.
शॉर्टकट किसको दिखे
स्टैटिक और डाइनैमिक शॉर्टकट, काम करने वाले लॉन्चर या असिस्टेंट में तब दिखते हैं, जब उपयोगकर्ता कोई जेस्चर करता है या बोलकर निर्देश देता है. इस सुविधा के साथ काम करने वाले लॉन्चर पर, ऐप्लिकेशन के लॉन्चर आइकॉन को दबाकर रखने पर यह जेस्चर काम करता है. हालांकि, अन्य लॉन्चर ऐप्लिकेशन पर यह जेस्चर अलग हो सकता है. Google Assistant की मदद से, शॉर्टकट को Assistant में दिखाया जा सकता है या उपयोगकर्ता के बोले गए निर्देश से लॉन्च किया जा सकता है.
LauncherApps क्लास, लॉन्चर ऐप्लिकेशन को शॉर्टकट ऐक्सेस करने के लिए एपीआई उपलब्ध कराती है.
पिन किए गए शॉर्टकट, लॉन्चर में ही दिखते हैं. इसलिए, वे हमेशा दिखते हैं. पिन किए गए शॉर्टकट को लॉन्चर से सिर्फ़ इन स्थितियों में हटाया जाता है:
- उपयोगकर्ता उसे हटा देता है.
- शॉर्टकट से जुड़ा ऐप्लिकेशन अनइंस्टॉल कर दिया गया हो.
- उपयोगकर्ता, सेटिंग > ऐप्लिकेशन और सूचनाएं में जाकर, ऐप्लिकेशन का डेटा मिटाता है. इसके लिए, वह ऐप्लिकेशन को चुनता है और फिर स्टोरेज > स्टोरेज खाली करें पर टैप करता है.
शेयर टारगेट, डाइनैमिक शॉर्टकट का एक सबसेट होते हैं. ये Android की शेयर शीट में, डायरेक्ट शेयर वाली लाइन में दिखते हैं.
शॉर्टकट दिखाने का क्रम
जब लॉन्चर किसी ऐप्लिकेशन के शॉर्टकट दिखाता है, तो उन्हें इस क्रम में दिखना चाहिए:
- स्टैटिक शॉर्टकट: ऐसे शॉर्टकट जिनका
isDeclaredInManifest()तरीकाtrueदिखाता है. - डाइनैमिक शॉर्टकट: ऐसे शॉर्टकट जिनका
ShortcutInfo.isDynamic()तरीकाtrueदिखाता है.
स्टैटिक और डाइनैमिक, दोनों तरह के शॉर्टकट को ShortcutInfo.getRank के हिसाब से, बढ़ती हुई रैंक के क्रम में लगाया जाता है. Google Assistant, उपयोगकर्ताओं को काम के शॉर्टकट दिखाने के लिए, शॉर्टकट की रैंक को भी ध्यान में रखती है.
रैंक, शून्य से बड़ी और क्रम में चलने वाली संख्याएं होती हैं. स्टैटिक शॉर्टकट को आपकी shortcuts.xml फ़ाइल में दिखने के क्रम में, पहले से आखिरी तक रैंक किया जाता है. डाइनैमिक शॉर्टकट के लिए, updateShortcuts(Context, List), addDynamicShortcuts(Context,
List), pushDynamicShortcut(Context, ShortcutInfoCompat) या setDynamicShortcuts(Context, List) को कॉल करते समय, मौजूदा शॉर्टकट की रैंक अपडेट की जा सकती हैं.
शेयर करने के टारगेट का क्रम कई बातों पर निर्भर करता है. जैसे, उपयोगकर्ता का पिछला इतिहास, रीसेंसी, फ़्रीक्वेंसी, रैंक हिंट, ऐप्लिकेशन का इस्तेमाल, और शेयर करने के शॉर्टकट से जुड़ी बातचीत पर सेट की गई प्राथमिकता. Sharing Shortcuts API का इस्तेमाल करके बनाए गए शेयर टारगेट को, ChooserTargetService से बनाए गए शेयर टारगेट की तुलना में प्राथमिकता दी जाती है. इस एपीआई को Android 11 में बंद कर दिया गया था. Android 12 और इसके बाद के वर्शन में, अब काम न करने वाले ChooserTargetService से जनरेट किए गए शेयर टारगेट, शेयर शीट में नहीं दिखेंगे.
ज़्यादातर लॉन्चर में ज़्यादा से ज़्यादा चार शॉर्टकट दिखते हैं. तय किए गए स्टैटिक शॉर्टकट और डाइनैमिक शॉर्टकट के किसी भी कॉम्बिनेशन के लिए, लॉन्चर ज़्यादा से ज़्यादा दो स्टैटिक शॉर्टकट और दो डाइनैमिक शॉर्टकट दिखाता है. उदाहरण के लिए, अगर आपने चार स्टैटिक शॉर्टकट तय किए हैं और प्रोग्राम के हिसाब से तीन डाइनैमिक शॉर्टकट बनाए हैं, तो लॉन्चर पहले दो स्टैटिक शॉर्टकट और सबसे ज़्यादा रैंक वाले दो डाइनैमिक शॉर्टकट दिखाता है.
एक से ज़्यादा इंटेंट और गतिविधियां मैनेज करना
अगर आपको उपयोगकर्ता के शॉर्टकट चालू करने पर, अपने ऐप्लिकेशन से कई कार्रवाइयां करानी हैं, तो उसे एक के बाद एक गतिविधियां ट्रिगर करने के लिए कॉन्फ़िगर किया जा सकता है. शॉर्टकट के टाइप के आधार पर, कई इंटेंट असाइन करके, एक गतिविधि से दूसरी गतिविधि शुरू करके या इंटेंट फ़्लैग सेट करके, ऐसा किया जा सकता है.
एक गतिविधि से दूसरी गतिविधि शुरू करना
स्टैटिक शॉर्टकट में कस्टम इंटेंट फ़्लैग नहीं हो सकते. स्टैटिक शॉर्टकट के पहले इंटेंट में, हमेशा Intent.FLAG_ACTIVITY_NEW_TASK और Intent.FLAG_ACTIVITY_CLEAR_TASK सेट होता है. इसका मतलब है कि जब आपका ऐप्लिकेशन चल रहा होता है, तो स्टैटिक शॉर्टकट लॉन्च होने पर, ऐप्लिकेशन में मौजूद सभी गतिविधियां बंद हो जाती हैं. अगर आपको ऐसा नहीं करना है, तो ट्रैम्पोलीन गतिविधि का इस्तेमाल करें. यह एक ऐसी गतिविधि है जो नहीं दिखती और दूसरी गतिविधि को शुरू करती है. इसके लिए, लॉन्च ब्लॉक में finish को कॉल करें या Compose कॉन्टेंट सेट करने से पहले onCreate को कॉल करें:
AndroidManifest.xml fileमें, ट्रैम्पोलीन गतिविधि में एट्रिब्यूट असाइनमेंटandroid:taskAffinity=""को शामिल करें.शॉर्टकट की रिसॉर्स फ़ाइल में, स्टैटिक शॉर्टकट के इंटेंट में ट्रैंपोलीन गतिविधि का रेफ़रंस दें.
ट्रैम्पोलीन गतिविधियों के बारे में ज़्यादा जानकारी के लिए, एक गतिविधि से दूसरी गतिविधि शुरू करना लेख पढ़ें.
इंटेंट फ़्लैग सेट करना
Intent फ़्लैग के किसी भी सेट के साथ डाइनैमिक शॉर्टकट पब्लिश किए जा सकते हैं.
शॉर्टकट के इंटेंट में, Intent.FLAG_ACTIVITY_SINGLE_TOP और Intent.FLAG_ACTIVITY_CLEAR_TOP का कॉम्बिनेशन तय करें. इससे यह पक्का होता है कि अगर आपकी ComponentActivity पहले से चालू है, तो उसे फ़ोरग्राउंड में लाया जाए और उसे बंद किए बिना फिर से इस्तेमाल किया जाए. इससे, सिंगल-ऐक्टिविटी आर्किटेक्चर, onNewIntent() के ज़रिए शॉर्टकट इवेंट को आसानी से मैनेज कर पाता है.
टास्क और इंटेंट फ़्लैग के बारे में ज़्यादा जानने के लिए, टास्क और पिछली गतिविधियां देखें.
शॉर्टकट अपडेट करना
हर ऐप्लिकेशन के लॉन्चर आइकॉन में, स्टैटिक और डाइनैमिक शॉर्टकट की ज़्यादा से ज़्यादा संख्या, getMaxShortcutCountPerActivity से मिली वैल्यू के बराबर हो सकती है. कोई ऐप्लिकेशन, पिन किए गए जितने चाहे उतने शॉर्टकट बना सकता है.
जब किसी डाइनैमिक शॉर्टकट को पिन किया जाता है, तो पब्लिशर उसे डाइनैमिक शॉर्टकट के तौर पर हटा देता है. इसके बावजूद, पिन किया गया शॉर्टकट दिखता रहता है और उसे लॉन्च किया जा सकता है. इससे किसी ऐप्लिकेशन में getMaxShortcutCountPerActivity से ज़्यादा शॉर्टकट जोड़े जा सकते हैं.
नीचे दिए गए उदाहरण को देखें. इसमें यह माना गया है कि getMaxShortcutCountPerActivity से मिली वैल्यू 4 है:
- कोई चैट ऐप्लिकेशन चार डाइनैमिक शॉर्टकट पब्लिश करता है. ये शॉर्टकट, हाल ही में की गई चार बातचीत को दिखाते हैं: c1, c2, c3, और c4.
- उपयोगकर्ता, चारों शॉर्टकट पिन करता है.
- इसके बाद, उपयोगकर्ता तीन और बातचीत शुरू करता है: c5, c6, और c7. पब्लिशर ऐप्लिकेशन, अपने डाइनैमिक शॉर्टकट फिर से पब्लिश करता है. नई डाइनैमिक शॉर्टकट सूची में ये शामिल हैं: c4, c5, c6, और c7.
ऐप्लिकेशन को c1, c2, और c3 को हटाना होगा, क्योंकि वह चार से ज़्यादा डाइनैमिक शॉर्टकट नहीं दिखा सकता. हालांकि, c1, c2, और c3 अब भी पिन किए गए शॉर्टकट हैं. उपयोगकर्ता इन्हें ऐक्सेस और लॉन्च कर सकता है.
इसके बाद, उपयोगकर्ता कुल सात शॉर्टकट ऐक्सेस कर सकता है. ये शॉर्टकट, पब्लिशर के ऐप्लिकेशन में मौजूद गतिविधियों से लिंक होते हैं. ऐसा इसलिए होता है, क्योंकि कुल संख्या में शॉर्टकट की ज़्यादा से ज़्यादा संख्या और पिन किए गए तीन शॉर्टकट शामिल होते हैं.
- ऐप्लिकेशन,
updateShortcuts(Context, List)का इस्तेमाल करके, पहले से मौजूद सात शॉर्टकट में से किसी को भी अपडेट कर सकता है. उदाहरण के लिए, चैट में शामिल लोगों के आइकॉन बदलने पर, शॉर्टकट के इस सेट को अपडेट किया जा सकता है. - एक ही आईडी वाले मौजूदा शॉर्टकट अपडेट करने के लिए,
addDynamicShortcuts(Context, List)औरsetDynamicShortcuts(Context, List)तरीकों का इस्तेमाल किया जा सकता है. हालांकि, इनका इस्तेमाल डाइनैमिक नहीं होने वाले और पिन किए गए शॉर्टकट अपडेट करने के लिए नहीं किया जा सकता. ऐसा इसलिए, क्योंकि ये दोनों तरीके शॉर्टकट की दी गई सूचियों को डाइनैमिक शॉर्टकट में बदलने की कोशिश करते हैं.
Google Assistant जैसे सहायक ऐप्लिकेशन पर, जितने चाहें उतने शॉर्टकट दिखाए जा सकते हैं. सहायक ऐप्लिकेशन पर इस्तेमाल करने के लिए, शॉर्टकट बनाने और उन्हें अपडेट करने के लिए, ShortcutManagerCompat Jetpack लाइब्रेरी के pushDynamicShortcut तरीके का इस्तेमाल करें. साथ ही, अपने ऐप्लिकेशन में Google Shortcuts Integration लाइब्रेरी जोड़ें, ताकि डाइनैमिक लिंक, Google Assistant पर दिख सकें.
ऐप्लिकेशन के शॉर्टकट से जुड़े दिशा-निर्देशों के बारे में ज़्यादा जानने के लिए, शॉर्टकट इस्तेमाल करने के सबसे सही तरीके देखें. इनमें शॉर्टकट अपडेट करने के बारे में भी बताया गया है.
सिस्टम की स्थान-भाषा में होने वाले बदलावों को मैनेज करना
सिस्टम की भाषा में बदलाव होने पर, ऐप्लिकेशन को डाइनैमिक और पिन किए गए शॉर्टकट अपडेट करने होंगे. ऐसा तब करना होगा, जब उन्हें Intent.ACTION_LOCALE_CHANGED ब्रॉडकास्ट मिले.
शॉर्टकट के इस्तेमाल को ट्रैक करना
स्टैटिक और डाइनैमिक शॉर्टकट किन स्थितियों में दिखते हैं, यह तय करने के लिए लॉन्चर, शॉर्टकट के चालू होने के इतिहास की जांच करता है. स्टैटिक शॉर्टकट के लिए,
यह ट्रैक किया जा सकता है कि उपयोगकर्ता आपके ऐप्लिकेशन में कोई खास कार्रवाई कब पूरी करते हैं. इसके लिए,
reportShortcutUsed तरीके को कॉल करें और इनमें से कोई भी इवेंट होने पर,
शॉर्टकट का आईडी पास करें:
- उपयोगकर्ता, दिए गए आईडी वाला शॉर्टकट चुनता है.
- उपयोगकर्ता, ऐप्लिकेशन में जाकर मैन्युअल तरीके से उस कार्रवाई को पूरा करता है जो उस शॉर्टकट से जुड़ी है.
आपका ऐप्लिकेशन, डाइनैमिक शॉर्टकट के इस्तेमाल को ट्रैक करता है. इसके लिए, वह pushDynamicShortcut तरीके को कॉल करता है और कोई काम का इवेंट होने पर, उसे शॉर्टकट का आईडी पास करता है.
इस तरीके से डाइनैमिक शॉर्टकट का इस्तेमाल करने पर, Google Assistant जैसे सहायक ऐप्लिकेशन, उपयोगकर्ताओं को काम के शॉर्टकट सुझा सकते हैं. pushDynamicShortcut तरीके को कॉल करने पर, यह इस्तेमाल की जानकारी देता है. इसलिए, एक ही शॉर्टकट के लिए reportShortcutUsed तरीके को कॉल न करें.
बातचीत से जुड़े शॉर्टकट के लिए, भेजे जाने वाले और मिलने वाले मैसेज के इस्तेमाल को ट्रैक करना ज़रूरी है. ज़्यादा जानकारी के लिए, लोगों और बातचीत के लिए सबसे सही तरीके देखें.
शॉर्टकट बंद करें
आपका ऐप्लिकेशन और इसके उपयोगकर्ता, डिवाइस के लॉन्चर में शॉर्टकट पिन कर सकते हैं. इसलिए, ऐसा हो सकता है कि पिन किए गए ये शॉर्टकट, उपयोगकर्ताओं को आपके ऐप्लिकेशन में ऐसी कार्रवाइयों पर ले जाएं जो पुरानी हो चुकी हैं या अब मौजूद नहीं हैं. इस स्थिति को मैनेज करने के लिए, उन शॉर्टकट को बंद किया जा सकता है जिन्हें आपको उपयोगकर्ताओं को चुनने की अनुमति नहीं देनी है. इसके लिए, disableShortcuts को कॉल करें. इससे, स्टैटिक और डाइनैमिक शॉर्टकट की सूची से, चुने गए शॉर्टकट हट जाते हैं. साथ ही, इन शॉर्टकट की पिन की गई कॉपी बंद हो जाती हैं. इस तरीके के ओवरलोड किए गए वर्शन का भी इस्तेमाल किया जा सकता है. यह वर्शन, गड़बड़ी के कस्टम मैसेज के तौर पर CharSequence को स्वीकार करता है. जब उपयोगकर्ता बंद किए गए किसी शॉर्टकट को लॉन्च करने की कोशिश करते हैं, तब गड़बड़ी का यह मैसेज दिखता है.
अनुरोध संख्या सीमित करना
setDynamicShortcuts, addDynamicShortcuts या updateShortcuts तरीकों का इस्तेमाल करते समय, हो सकता है कि आप बैकग्राउंड ऐप्लिकेशन में इन तरीकों को सिर्फ़ कुछ ही बार कॉल कर पाएं. बैकग्राउंड ऐप्लिकेशन, ऐसा ऐप्लिकेशन होता है जिसमें फ़ोरग्राउंड में कोई गतिविधि या सेवा नहीं होती.
इन तरीकों को कॉल करने की संख्या पर लगने वाली सीमा को अनुरोध संख्या सीमित करना कहा जाता है. इस सुविधा की मदद से, ShortcutManagerCompat को डिवाइस के संसाधनों का ज़रूरत से ज़्यादा इस्तेमाल करने से रोका जा सकता है.
अनुरोध संख्या सीमित करने की सुविधा चालू होने पर, isRateLimitingActive 'सही' दिखाता है.
हालांकि, कुछ इवेंट के दौरान अनुरोध संख्या सीमित करने की सुविधा रीसेट हो जाती है. इसलिए, बैकग्राउंड में चलने वाले ऐप्लिकेशन भी ShortcutManager के तरीकों को तब तक कॉल कर सकते हैं, जब तक कि अनुरोध संख्या सीमित करने की सुविधा फिर से चालू नहीं हो जाती. इन इवेंट में ये शामिल हैं:
- कोई ऐप्लिकेशन फ़ोरग्राउंड में आता है.
- सिस्टम की स्थान-भाषा बदलती है.
- उपयोगकर्ता, सूचना पर इनलाइन जवाब की कार्रवाई करता है.
अगर आपको ऐप्लिकेशन डेवलप करने या उसकी जांच करने के दौरान, अनुरोध संख्या सीमित करने की सुविधा से जुड़ी समस्या आती है, तो डिवाइस की सेटिंग में जाकर, डेवलपर के लिए सेटिंग और टूल > ShortcutManager की अनुरोध संख्या सीमित करने की सुविधा को रीसेट करें को चुनें. इसके अलावा, adb में यह कमांड भी डाला जा सकता है:
adb shell cmd shortcut reset-throttling [ --user your-user-id ]
बैकअप और पहले जैसा करने की सुविधा
अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में android:allowBackup="true" एट्रिब्यूट असाइनमेंट शामिल करके, उपयोगकर्ताओं को डिवाइस बदलते समय आपके ऐप्लिकेशन पर बैकअप लेने और उसे वापस लाने की अनुमति दी जा सकती है. अगर आपके ऐप्लिकेशन में बैकअप लेने और उसे वापस पाने की सुविधा है, तो ऐप्लिकेशन के शॉर्टकट के बारे में इन बातों का ध्यान रखें:
- स्टैटिक शॉर्टकट अपने-आप फिर से पब्लिश हो जाते हैं. हालांकि, ऐसा तब होता है, जब उपयोगकर्ता आपके ऐप्लिकेशन को किसी नए डिवाइस पर फिर से इंस्टॉल करता है.
- डाइनैमिक शॉर्टकट का बैक अप नहीं लिया जाता. इसलिए, अपने ऐप्लिकेशन में लॉजिक शामिल करें, ताकि जब कोई उपयोगकर्ता किसी नए डिवाइस पर आपका ऐप्लिकेशन खोले, तो उन्हें फिर से पब्लिश किया जा सके.
- पिन किए गए शॉर्टकट, डिवाइस के लॉन्चर में अपने-आप वापस आ जाते हैं. हालांकि, सिस्टम, पिन किए गए शॉर्टकट से जुड़े आइकॉन का बैक अप नहीं लेता. इसलिए, पिन किए गए शॉर्टकट की इमेज को अपने ऐप्लिकेशन में सेव करें, ताकि उन्हें नए डिवाइस पर तुरंत वापस लाया जा सके.
यहां दिए गए कोड स्निपेट से पता चलता है कि अपने ऐप्लिकेशन के डाइनैमिक शॉर्टकट को वापस लाने का सबसे सही तरीका क्या है. साथ ही, यह भी पता चलता है कि ऐप्लिकेशन के पिन किए गए शॉर्टकट को सुरक्षित रखा गया है या नहीं:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (ShortcutManagerCompat.getDynamicShortcuts(this).isEmpty()) { // Application restored. Re-publish dynamic shortcuts. if (ShortcutManagerCompat.getShortcuts(this, ShortcutManagerCompat.FLAG_MATCH_PINNED).isNotEmpty()) { // Pinned shortcuts are restored. Use updateShortcuts() to make // sure they contain up-to-date information. } } } // ... }