शॉर्टकट मैनेज करें

शॉर्टकट बनाने के बाद, आपको अपने ऐप्लिकेशन के पूरे जीवनकाल में उन्हें मैनेज करना पड़ सकता है. उदाहरण के लिए, आपको यह तय करके अपने ऐप्लिकेशन को ऑप्टिमाइज़ करना पड़ सकता है कि उपयोगकर्ता, आपके शॉर्टकट की मदद से कितनी बार कुछ कार्रवाइयां पूरी करते हैं. किसी अन्य मामले में, पिन किए गए शॉर्टकट को बंद किया जा सकता है, ताकि आपका ऐप्लिकेशन पुरानी या मौजूद नहीं कार्रवाइयां न करे. बातचीत में जिन शॉर्टकट का रेफ़रंस दिया गया है उनके इस्तेमाल को ट्रैक किया जा सकता है. इससे ऐसे सिग्नल मिलते हैं जिनसे शॉर्टकट की रैंकिंग बेहतर होती है.

इस पेज पर, शॉर्टकट मैनेज करने के इन और अन्य सामान्य तरीकों के बारे में बताया गया है.

शॉर्टकट का व्यवहार

यहां दिए गए सेक्शन में, शॉर्टकट के काम करने के तरीके के बारे में सामान्य जानकारी दी गई है. इसमें शॉर्टकट दिखने, उनके दिखने का क्रम, और रैंक शामिल हैं.

शॉर्टकट किसको दिखे

जब उपयोगकर्ता कोई खास जेस्चर करता है या बोलकर कोई निर्देश देता है, तब स्टैटिक शॉर्टकट और डाइनैमिक शॉर्टकट, काम करने वाले लॉन्चर या Assistant में दिखते हैं. जिन लॉन्चर पर यह सुविधा काम करती है उन पर, ऐप्लिकेशन के लॉन्चर आइकॉन को दबाकर रखने से यह सुविधा चालू होती है. हालांकि, अन्य लॉन्चर ऐप्लिकेशन पर यह सुविधा चालू करने का तरीका अलग हो सकता है. Google Assistant की मदद से, शॉर्टकट को Assistant में दिखाया जा सकता है. इसके अलावा, इन्हें उपयोगकर्ता के बोलकर दिए गए निर्देश से भी लॉन्च किया जा सकता है.

LauncherApps क्लास, लॉन्चर ऐप्लिकेशन को शॉर्टकट ऐक्सेस करने के लिए एपीआई उपलब्ध कराती है.

पिन किए गए शॉर्टकट, लॉन्चर में ही दिखते हैं. इसलिए, ये हमेशा दिखते हैं. पिन किए गए शॉर्टकट को लॉन्चर से सिर्फ़ इन स्थितियों में हटाया जाता है:

  • उपयोगकर्ता उसे हटा देता है.
  • शॉर्टकट से जुड़ा ऐप्लिकेशन अनइंस्टॉल कर दिया गया है.
  • उपयोगकर्ता, सेटिंग > ऐप्लिकेशन और सूचनाएं पर जाकर, किसी ऐप्लिकेशन का डेटा मिटाता है. इसके बाद, वह ऐप्लिकेशन को चुनता है और फिर स्टोरेज > स्टोरेज मिटाएं पर टैप करता है.

शेयर टारगेट, डाइनैमिक शॉर्टकट का एक सबसेट है. ये Android शेयर शीट की डायरेक्ट शेयर रो में दिखते हैं.

Android शेयरशीट
पहली इमेज. Android शेयरशीट. सीधे तौर पर कॉन्टेंट शेयर करने के लिए चुने गए लोग या ग्रुप, पहली लाइन में दिखते हैं. इसके बाद, रैंक किए गए ऐप्लिकेशन और फिर ऐप्लिकेशन की सूचियां दिखती हैं.

शॉर्टकट दिखाने का क्रम

जब लॉन्चर किसी ऐप्लिकेशन के शॉर्टकट दिखाता है, तो वे इस क्रम में दिखने चाहिए:

  1. स्टैटिक शॉर्टकट: ऐसे शॉर्टकट जिनके isDeclaredInManifest() तरीके से true मिलता है.
  2. डाइनैमिक शॉर्टकट: ऐसे शॉर्टकट जिनके 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 सेट होते हैं. इसका मतलब है कि जब आपका ऐप्लिकेशन चल रहा होता है, तब स्टैटिक शॉर्टकट लॉन्च होने पर, ऐप्लिकेशन में मौजूद सभी मौजूदा गतिविधियां बंद हो जाती हैं. अगर आपको यह व्यवहार नहीं चाहिए, तो ट्रम्पोलिन गतिविधि का इस्तेमाल किया जा सकता है. यह एक ऐसी गतिविधि होती है जो दिखती नहीं है और दूसरी गतिविधि शुरू करती है. इसके लिए, लॉन्च ब्लॉक या Compose कॉन्टेंट सेट होने से पहले onCreate में finish को कॉल करें:

  1. AndroidManifest.xml file में, ट्रम्पोलिन गतिविधि में एट्रिब्यूट असाइनमेंट android:taskAffinity="" शामिल करें.

  2. शॉर्टकट रिसॉर्स फ़ाइल में, स्टैटिक शॉर्टकट के इंटेंट में ट्रैम्पोलिन गतिविधि का रेफ़रंस दें.

ट्रैम्पोलिन गतिविधियों के बारे में ज़्यादा जानने के लिए, एक गतिविधि से दूसरी गतिविधि शुरू करना लेख पढ़ें.

इंटेंट फ़्लैग सेट करना

Intent फ़्लैग के किसी भी सेट के साथ डाइनैमिक शॉर्टकट पब्लिश किए जा सकते हैं. शॉर्टकट के इंटेंट में, Intent.FLAG_ACTIVITY_SINGLE_TOP और Intent.FLAG_ACTIVITY_CLEAR_TOP का कॉम्बिनेशन बताएं. इससे यह पक्का होता है कि अगर आपका ComponentActivity पहले से चालू है, तो उसे फ़ोरग्राउंड में लाया जाता है और उसे बंद किए बिना फिर से इस्तेमाल किया जाता है. इससे आपका सिंगल-ऐक्टिविटी आर्किटेक्चर, onNewIntent() के ज़रिए शॉर्टकट इवेंट को आसानी से हैंडल कर पाता है.

टास्क और इंटेंट फ़्लैग के बारे में ज़्यादा जानने के लिए, टास्क और बैक स्टैक लेख पढ़ें.

शॉर्टकट अपडेट करना

हर ऐप्लिकेशन के लॉन्चर आइकॉन में, ज़्यादा से ज़्यादा इतने स्टैटिक और डाइनैमिक शॉर्टकट हो सकते हैं जिनकी संख्या getMaxShortcutCountPerActivity से मिली वैल्यू के बराबर हो. कोई ऐप्लिकेशन, जितने चाहे उतने पिन किए गए शॉर्टकट बना सकता है.

डाइनैमिक शॉर्टकट को पिन करने पर, पब्लिशर के इसे डाइनैमिक शॉर्टकट के तौर पर हटाने के बाद भी, पिन किया गया शॉर्टकट दिखता है और इसे लॉन्च किया जा सकता है. इससे किसी ऐप्लिकेशन में getMaxShortcutCountPerActivity से ज़्यादा शॉर्टकट बनाए जा सकते हैं.

यहां दिए गए उदाहरण में, यह माना गया है कि getMaxShortcutCountPerActivity फ़ंक्शन से मिली वैल्यू 4 है:

  1. कोई चैट ऐप्लिकेशन, चार डाइनैमिक शॉर्टकट पब्लिश करता है. ये चार शॉर्टकट, हाल ही में हुई चार बातचीत को दिखाते हैं: c1, c2, c3, और c4.
  2. उपयोगकर्ता, चारों शॉर्टकट पिन करता है.
  3. बाद में, उपयोगकर्ता तीन और बातचीत शुरू करता है: c5, c6, और c7. पब्लिशर ऐप्लिकेशन, अपने डाइनैमिक शॉर्टकट को फिर से पब्लिश करता है. डाइनैमिक शॉर्टकट की नई सूची यह है: c4, c5, c6, और c7.

ऐप्लिकेशन को c1, c2, और c3 को हटाना होगा, क्योंकि यह चार से ज़्यादा डाइनैमिक शॉर्टकट नहीं दिखा सकता. हालांकि, c1, c2, और c3 अब भी पिन किए गए शॉर्टकट हैं, जिन्हें उपयोगकर्ता ऐक्सेस और लॉन्च कर सकता है.

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

  1. ऐप्लिकेशन, updateShortcuts(Context, List) का इस्तेमाल करके, मौजूदा सात शॉर्टकट में से किसी को भी अपडेट कर सकता है. उदाहरण के लिए, चैट करने वाले लोगों के आइकॉन बदलने पर, शॉर्टकट के इस सेट को अपडेट किया जा सकता है.
  2. addDynamicShortcuts(Context, List) और setDynamicShortcuts(Context, List) तरीकों का इस्तेमाल करके, एक ही आईडी वाले मौजूदा शॉर्टकट अपडेट किए जा सकते हैं. हालांकि, इनका इस्तेमाल नॉन-डाइनैमिक और पिन किए गए शॉर्टकट को अपडेट करने के लिए नहीं किया जा सकता. ऐसा इसलिए, क्योंकि ये दोनों तरीके शॉर्टकट की दी गई सूचियों को डाइनैमिक शॉर्टकट में बदलने की कोशिश करते हैं.

Google Assistant जैसे Assistant ऐप्लिकेशन पर दिखाने के लिए, जितने चाहें उतने शॉर्टकट पुश किए जा सकते हैं. ShortcutManagerCompat Jetpack लाइब्रेरी के pushDynamicShortcut तरीके का इस्तेमाल करके, Assistant ऐप्लिकेशन पर इस्तेमाल किए जाने वाले शॉर्टकट बनाएं और उन्हें अपडेट करें. साथ ही, अपने ऐप्लिकेशन में Google Shortcuts Integration library जोड़ें, ताकि डाइनैमिक लिंक, Google Assistant पर दिख सकें.

ऐप्लिकेशन शॉर्टकट के लिए दिशा-निर्देशों के बारे में ज़्यादा जानने के लिए, शॉर्टकट इस्तेमाल करने के सबसे सही तरीके लेख पढ़ें. इसमें शॉर्टकट अपडेट करने के बारे में भी बताया गया है.

सिस्टम के स्थान-भाषा में हुए बदलावों को हैंडल करना

जब ऐप्लिकेशन को Intent.ACTION_LOCALE_CHANGED ब्रॉडकास्ट मिलता है, तो उन्हें डाइनैमिक और पिन किए गए शॉर्टकट अपडेट करने होंगे. इस ब्रॉडकास्ट से पता चलता है कि सिस्टम के स्थान-भाषा में बदलाव हुआ है.

शॉर्टकट के इस्तेमाल को ट्रैक करना

स्टैटिक और डाइनैमिक शॉर्टकट किन स्थितियों में दिखते हैं, यह तय करने के लिए लॉन्चर, शॉर्टकट के चालू होने का इतिहास देखता है. स्टैटिक शॉर्टकट के लिए, यह ट्रैक किया जा सकता है कि उपयोगकर्ता आपके ऐप्लिकेशन में कब कोई खास कार्रवाई पूरी करते हैं. इसके लिए, reportShortcutUsed तरीके को कॉल करें और इनमें से कोई भी इवेंट होने पर, उसे शॉर्टकट का आईडी पास करें:

  • उपयोगकर्ता, दिए गए आईडी वाला शॉर्टकट चुनता है.
  • ऐप्लिकेशन में, उपयोगकर्ता मैन्युअल तरीके से उसी शॉर्टकट से जुड़ी कार्रवाई पूरी करता है.

आपका ऐप्लिकेशन, डाइनैमिक शॉर्टकट के इस्तेमाल को ट्रैक करता है. इसके लिए, वह pushDynamicShortcut मेथड को कॉल करता है और उससे शॉर्टकट का आईडी पास करता है. ऐसा तब किया जाता है, जब कोई काम का इवेंट होता है. इस तरीके से डाइनैमिक शॉर्टकट के इस्तेमाल को बढ़ावा देने से, Google Assistant जैसे 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.getPinnedShortcuts(this).isNotEmpty()) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}