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

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

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

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

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

शॉर्टकट की दिखने की सुविधा

जब उपयोगकर्ता कोई खास जेस्चर करता है या आवाज़ से निर्देश देता है, तब स्टैटिक शॉर्टकट और डाइनैमिक शॉर्टकट, काम करने वाले लॉन्चर या 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 में, ChooserTargetService को बंद कर दिया गया था. Android 12 और उसके बाद के वर्शन में, बंद किए गए ChooserTargetService से जनरेट किए गए शेयर टारगेट, शेयर शीट में नहीं दिखेंगे.

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

कई इंटेंट और ऐक्टिविटी मैनेज करना

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

एक ऐक्टिविटी को दूसरी से शुरू करना

स्टैटिक शॉर्टकट में, कस्टम इंटेंट फ़्लैग नहीं हो सकते. स्टैटिक शॉर्टकट के पहले इंटेंट में, हमेशा Intent.FLAG_ACTIVITY_NEW_TASK और Intent.FLAG_ACTIVITY_CLEAR_TASK सेट होते हैं. इसका मतलब है कि जब आपका ऐप्लिकेशन चल रहा होता है, तब स्टैटिक शॉर्टकट लॉन्च होने पर, ऐप्लिकेशन में मौजूद सभी ऐक्टिविटी बंद हो जाती हैं. अगर आपको यह व्यवहार नहीं चाहिए, तो ट्रम्पोलिन ऐक्टिविटी का इस्तेमाल किया जा सकता है. यह एक ऐसी न दिखने वाली ऐक्टिविटी होती है जो दूसरी ऐक्टिविटी शुरू करती है. इसके लिए, लॉन्च ब्लॉक या onCreate से पहले, फ़िनिश को कॉल करें:

  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 ऐप्लिकेशन पर दिखाने के लिए, पुश किए जा सकने वाले शॉर्टकट की संख्या की कोई सीमा नहीं है. Assistant ऐप्लिकेशन पर इस्तेमाल के लिए शॉर्टकट बनाने और अपडेट करने के लिए, pushDynamicShortcut ShortcutManagerCompat Jetpack लाइब्रेरी के method का इस्तेमाल करें. इसके अलावा, अपने ऐप्लिकेशन में Google Shortcuts Integration लाइब्रेरी जोड़ें, ताकि डाइनैमिक लिंक, 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 <var>your-user-id</var> ]

बैकअप और पहले जैसा करने की सुविधा

डिवाइस बदलने पर, उपयोगकर्ताओं को अपने ऐप्लिकेशन पर बैकअप और पहले जैसा करने की कार्रवाइयां करने की अनुमति दी जा सकती है. इसके लिए, अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, 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.
            }

        }
    }
    // ...
}