यह दस्तावेज़, इस्तेमाल के ऐसे कई सामान्य मामले दिखाता है जिनमें कोई ऐप्लिकेशन, अन्य ऐप्लिकेशन. हर सेक्शन में बताया गया है कि ऐप्लिकेशन की मदद से, पैकेज की सीमित विज़िबिलिटी वाली सुविधा है. अगर आपको ऐसा करना है, तो आपका ऐप्लिकेशन, Android 11 (एपीआई लेवल 30) या उसके बाद वाले वर्शन को टारगेट करता है.
जब Android 11 या उसके बाद के वर्शन को टारगेट करने वाला कोई ऐप्लिकेशन,
किसी दूसरे ऐप्लिकेशन में कोई गतिविधि शुरू करते हैं. सबसे आसान तरीका है कि
इंटेंट तय करें और
ActivityNotFoundException
अपवाद के तौर पर मार्क कर सकते हैं.
अगर आपके ऐप्लिकेशन का हिस्सा यह जानने पर निर्भर है कि
startActivity()
सफल हो सकता है, जैसे कि यूज़र इंटरफ़ेस (यूआई) दिखाना,
आपके ऐप्लिकेशन के <queries>
एलिमेंट
मेनिफ़ेस्ट. आम तौर पर, यह एक <intent>
एलिमेंट होता है.
यूआरएल खोलें
इस सेक्शन में, टारगेट किए गए किसी ऐप्लिकेशन में यूआरएल खोलने के अलग-अलग तरीके बताए गए हैं Android 11 या इसके बाद वाला वर्शन होना चाहिए.
किसी ब्राउज़र या दूसरे ऐप्लिकेशन में यूआरएल खोलना
यूआरएल खोलने के लिए, ऐसे इंटेंट का इस्तेमाल करें जिसमें
ACTION_VIEW
इंटेंट ऐक्शन, क्योंकि
गाइड में बताया गया है कि वेब लोड करना
यूआरएल. startActivity()
को कॉल करने के बाद
इस इंटेंट का इस्तेमाल करने पर, इनमें से कोई एक कार्रवाई होती है:
- यूआरएल, वेब ब्राउज़र ऐप्लिकेशन में खुलता है.
- यूआरएल ऐसे ऐप्लिकेशन में खुलता है जो यूआरएल को डीप के तौर पर काम करता है लिंक पर क्लिक करें.
- साफ़ तौर पर जानकारी देने वाला डायलॉग बॉक्स दिखता है. इसकी मदद से, उपयोगकर्ता यह चुन सकता है कि कौनसा ऐप्लिकेशन यूआरएल खोलता है.
ActivityNotFoundException
इसलिए दिखता है, क्योंकि इस पर कोई ऐप्लिकेशन इंस्टॉल नहीं है यूआरएल खोल सकते हैं. (यह असामान्य है.)हमारा सुझाव है कि आपका ऐप्लिकेशन अगर ऐसा होता है, तो
ActivityNotFoundException
.
क्योंकि startActivity()
तरीके को इस्तेमाल करने के लिए, पैकेज दिखाने की ज़रूरत नहीं होती
किसी अन्य ऐप्लिकेशन की गतिविधि शुरू करती है, तो आपको <queries>
जोड़ने की ज़रूरत नहीं है
ऐप्लिकेशन के मेनिफ़ेस्ट में एलिमेंट जोड़ा जा सकता है या किसी मौजूदा <queries>
में कोई बदलाव किया जा सकता है
एलिमेंट. यह यूआरएल खोलने वाले इंप्लिसिट और एक्सप्लिसिट इंटेंट, दोनों पर सही लागू होता है.
यह देखना कि ब्राउज़र उपलब्ध है या नहीं
कुछ मामलों में, हो सकता है कि आपका ऐप्लिकेशन यह पुष्टि करना चाहे कि उसमें कम से कम एक ब्राउज़र मौजूद है
जो डिवाइस पर उपलब्ध हो या कोई ब्राउज़र डिफ़ॉल्ट ब्राउज़र के तौर पर सेट हो,
कोशिश करने से पहले उसे हटा दें. ऐसे मामलों में, नीचे दी गई जानकारी शामिल करें
आपके मेनिफ़ेस्ट में <queries>
एलिमेंट के हिस्से के तौर पर <intent>
एलिमेंट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent>
जब queryIntentActivities()
को कॉल किया जाता है और वेब इंटेंट को तर्क के तौर पर पास किया जाता है,
कुछ मामलों में, दिखाई गई सूची में उपलब्ध ब्राउज़र ऐप्लिकेशन शामिल होते हैं. सूची
में ब्राउज़र के ऐप्लिकेशन शामिल नहीं होते, अगर उपयोगकर्ता ने यूआरएल को
बिना ब्राउज़र वाला ऐप्लिकेशन डिफ़ॉल्ट तौर पर.
कस्टम टैब में यूआरएल खोलें
कस्टम टैब
ऐप ब्राउज़र का लुक कस्टमाइज़ करने के लिए कस्टमाइज़ कर सकता है. यूआरएल को
कस्टम टैब
इसके लिए, आपको ऐप्लिकेशन मेनिफ़ेस्ट में <queries>
एलिमेंट जोड़ने या बदलने की ज़रूरत नहीं पड़ेगी.
हालांकि, यह पता किया जा सकता है कि डिवाइस में ऐसा ब्राउज़र है या नहीं जो
कस्टम टैब
या इसका उपयोग करके कस्टम टैब के साथ लॉन्च करने के लिए कोई विशिष्ट ब्राउज़र चुनें
CustomTabsClient.getPackageName()
.
ऐसे मामलों में, नीचे दिए गए <intent>
एलिमेंट को
आपके मेनिफ़ेस्ट में <queries>
एलिमेंट मौजूद है:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.support.customtabs.action.CustomTabsService" /> </intent>अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
ब्राउज़र के अलावा अन्य ऐप्लिकेशन को यूआरएल मैनेज करने दें
भले ही आपका ऐप्लिकेशन कस्टम टैब का इस्तेमाल करके यूआरएल खोल सकता हो, फिर भी यह सुझाव दिया जाता है कि आप
अगर हो सके, तो बिना ब्राउज़र वाले किसी ऐप्लिकेशन को यूआरएल खोलने दें. इसे देने के लिए
आपके ऐप्लिकेशन में उपलब्ध है, इंटेंट का इस्तेमाल करके startActivity()
को कॉल करने की कोशिश करें
जो
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
इंटेंट फ़्लैग का इस्तेमाल करें. अगर सिस्टम को ActivityNotFoundException
मिलता है, तो आपका ऐप्लिकेशन
फिर कस्टम टैब में URL खोलें.
अगर किसी इंटेंट में यह फ़्लैग शामिल है, तो startActivity()
को कॉल करने पर
इनमें से किसी एक स्थिति में ActivityNotFoundException
दी जाएगी
स्थितियां होती हैं:
- उस कॉल में सीधे कोई ब्राउज़र ऐप्लिकेशन लॉन्च किया गया होगा.
- इस कॉल में उपयोगकर्ता को साफ़ तौर पर जानकारी देने वाला एक डायलॉग दिखाया जाता, जहां सिर्फ़ ब्राउज़र ऐप्लिकेशन के विकल्प भी हैं.
नीचे दिया गया कोड स्निपेट,
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
इंटेंट फ़्लैग:
Kotlin
try { val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply { // The URL should either launch directly in a non-browser app (if it's // the default) or in the disambiguation dialog. addCategory(CATEGORY_BROWSABLE) flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER } startActivity(intent) } catch (e: ActivityNotFoundException) { // Only browser apps are available, or a browser is the default. // So you can open the URL directly in your app, for example in a // Custom Tab. openInCustomTabs(url) }
Java
try { Intent intent = new Intent(ACTION_VIEW, Uri.parse(url)); // The URL should either launch directly in a non-browser app (if it's the // default) or in the disambiguation dialog. intent.addCategory(CATEGORY_BROWSABLE); intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER); startActivity(intent); } catch (ActivityNotFoundException e) { // Only browser apps are available, or a browser is the default. // So you can open the URL directly in your app, for example in a // Custom Tab. openInCustomTabs(url); }
साफ़ तौर पर जानकारी देने वाले डायलॉग से बचें
अगर आपको साफ़ तौर पर जानकारी देने वाला ऐसा डायलॉग नहीं दिखाना है जो लोगों को कब दिखेगा
तो वे कोई URL खोलते हैं और इसके बजाय इन
स्थितियों में, ऐसे इंटेंट का इस्तेमाल किया जा सकता है जो
FLAG_ACTIVITY_REQUIRE_DEFAULT
इंटेंट फ़्लैग का इस्तेमाल करें.
अगर किसी इंटेंट में यह फ़्लैग शामिल है, तो startActivity()
को कॉल करने पर
कॉल में शामिल होने के लिए, ActivityNotFoundException
दिए जाएंगे
साफ़ तौर पर जानकारी देने वाला डायलॉग बॉक्स.
अगर किसी इंटेंट में यह फ़्लैग और
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
इंटेंट फ़्लैग, startActivity()
को कॉल करने से ActivityNotFoundException
निम्न में से कोई भी स्थिति होने पर निकालना:
- कॉल सीधे ब्राउज़र ऐप्लिकेशन को लॉन्च कर सकता था.
- इस कॉल में उपयोगकर्ता को साफ़ तौर पर जानकारी देने वाला डायलॉग दिखाया जाता.
नीचे दिया गया कोड स्निपेट, FLAG_ACTIVITY_REQUIRE_NON_BROWSER
को इस्तेमाल करने का तरीका बताता है
और FLAG_ACTIVITY_REQUIRE_DEFAULT
फ़्लैग एक साथ:
Kotlin
val url = URL_TO_LOAD try { // For this intent to be invoked, the system must directly launch a // non-browser app. val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply { addCategory(CATEGORY_BROWSABLE) flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER or FLAG_ACTIVITY_REQUIRE_DEFAULT } startActivity(intent) } catch (e: ActivityNotFoundException) { // This code executes in one of the following cases: // 1. Only browser apps can handle the intent. // 2. The user has set a browser app as the default app. // 3. The user hasn't set any app as the default for handling this URL. openInCustomTabs(url) }
Java
String url = URL_TO_LOAD; try { // For this intent to be invoked, the system must directly launch a // non-browser app. Intent intent = new Intent(ACTION_VIEW, Uri.parse(url)); intent.addCategory(CATEGORY_BROWSABLE); intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER | FLAG_ACTIVITY_REQUIRE_DEFAULT); startActivity(intent); } catch (ActivityNotFoundException e) { // This code executes in one of the following cases: // 1. Only browser apps can handle the intent. // 2. The user has set a browser app as the default app. // 3. The user hasn't set any app as the default for handling this URL. openInCustomTabs(url); }
फ़ाइल खोलें
अगर आपका ऐप्लिकेशन फ़ाइलों या अटैचमेंट को हैंडल करता है, जैसे कि यह देखना कि डिवाइस ये काम कर सकता है या नहीं
कोई दी गई फ़ाइल खोलने के लिए, आम तौर पर ऐसी गतिविधि शुरू करना सबसे आसान होता है जो
फ़ाइल हैंडल करें. ऐसा करने के लिए, ऐसे इंटेंट का इस्तेमाल करें जिसमें ACTION_VIEW
इंटेंट शामिल हो
कार्रवाई और यूआरआई शामिल है, जो खास फ़ाइल को दिखाता है. अगर कोई ऐप्लिकेशन उपलब्ध नहीं है
डिवाइस, आपका ऐप्लिकेशन ActivityNotFoundException
को कैप्चर कर सकता है. अपने
अपवाद-हैंडलिंग लॉजिक होता है, तो गड़बड़ी दिखाई जा सकती है या फ़ाइल को हैंडल करने की कोशिश की जा सकती है
खुद को बेहतर बनाएं.
अगर आपके ऐप्लिकेशन को पहले से यह पता होना चाहिए कि कोई अन्य ऐप्लिकेशन किसी फ़ाइल को खोल सकता है या नहीं,
इसके हिस्से के तौर पर, नीचे दिए गए कोड स्निपेट में <intent>
एलिमेंट को शामिल करें
आपके मेनिफ़ेस्ट में <queries>
एलिमेंट मौजूद है. अगर आपको फ़ाइल टाइप के बारे में पहले से पता है, तो उसे शामिल करें
कंपाइल करते समय यह क्या होता है.
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.VIEW" /> <!-- If you don't know the MIME type in advance, set "mimeType" to "*/*". --> <data android:mimeType="application/pdf" /> </intent>
इसके बाद, resolveActivity()
पर कॉल करके देखा जा सकता है कि कोई ऐप्लिकेशन उपलब्ध है या नहीं
ध्यान दें.
यूआरआई ऐक्सेस दें
ध्यान दें: इस सेक्शन में बताए गए तरीके से, यूआरआई ऐक्सेस की अनुमतियों का एलान करना Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए ज़रूरी है और यह सुझाव सभी ऐप्लिकेशन के लिए दिया जाता है. भले ही, उनका टारगेट SDK वर्शन कुछ भी हो और वे एक्सपोर्ट करते हैं कॉन्टेंट उपलब्ध कराने वाली कंपनियां.
Android 11 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन
कॉन्टेंट यूआरआई को ऐक्सेस करने पर, आपके ऐप्लिकेशन के इंटेंट को यूआरआई ऐक्सेस के बारे में एलान करना होगा
अनुमतियां
निम्न में से एक या दोनों इंटेंट फ़्लैग सेट करके:
FLAG_GRANT_READ_URI_PERMISSION
और
FLAG_GRANT_WRITE_URI_PERMISSION
.
Android 11 और उसके बाद वाले वर्शन पर, यूआरआई ऐक्सेस की अनुमतियां इंटेंट पाने वाले ऐप्लिकेशन की ये क्षमताएं हैं:
- कॉन्टेंट यूआरआई के आधार पर जिस डेटा का प्रतिनिधित्व करता है उसे पढ़ें या उसमें लिखें दी गई यूआरआई अनुमतियां दी हैं.
- उस ऐप्लिकेशन के बारे में जानें जिसमें कॉन्टेंट उपलब्ध कराने वाला वह ऐप्लिकेशन मौजूद है जो यूआरआई अथॉरिटी. जिस ऐप्लिकेशन में कॉन्टेंट देने वाला शामिल है वह अलग हो सकता है इंटेंट भेजने वाले ऐप्लिकेशन से.
नीचे दिया गया कोड स्निपेट, यूआरआई की अनुमतियों के इंटेंट फ़्लैग को जोड़ने का तरीका बताता है इससे Android 11 या उसके बाद के वर्शन को टारगेट करने वाला कोई अन्य ऐप्लिकेशन, कॉन्टेंट यूआरआई में डेटा:
Kotlin
val shareIntent = Intent(Intent.ACTION_VIEW).apply { flags = Intent.FLAG_GRANT_READ_URI_PERMISSION data = CONTENT_URI_TO_SHARE_WITH_OTHER_APP }
Java
Intent shareIntent = new Intent(Intent.ACTION_VIEW); shareIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setData(CONTENT_URI_TO_SHARE_WITH_OTHER_APP);
सेवाओं से कनेक्ट करें
अगर आपके ऐप्लिकेशन को किसी ऐसी सेवा के साथ इंटरैक्ट करना हो जो दिखती नहीं है
स्वचालित रूप से, आप घोषणा कर सकते हैं
<queries>
एलिमेंट में सही इंटेंट कार्रवाई. ये सेक्शन
आम तौर पर ऐक्सेस की जाने वाली सेवाओं का इस्तेमाल करके उदाहरण देते हैं.
लिखाई को बोली में बदलने वाले इंजन से कनेक्ट करें
अगर आपका ऐप्लिकेशन, लिखाई को बोली में बदलने की सुविधा (टीटीएस) इंजन के साथ इंटरैक्ट करता है, तो ये बातें शामिल करें
आपके मेनिफ़ेस्ट में <queries>
एलिमेंट के हिस्से के तौर पर <intent>
एलिमेंट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent>
बोली पहचान करने वाली किसी सेवा से कनेक्ट करें
अगर आपका ऐप्लिकेशन, बोली पहचानने वाली किसी सेवा के साथ इंटरैक्ट करता है, तो यह जानकारी शामिल करें
आपके मेनिफ़ेस्ट में <queries>
एलिमेंट के हिस्से के तौर पर <intent>
एलिमेंट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.speech.RecognitionService" /> </intent>
मीडिया ब्राउज़र सर्विस से कनेक्ट करें
अगर आपका ऐप्लिकेशन एक क्लाइंट मीडिया ब्राउज़र है
ऐप्लिकेशन में शामिल है,
आपके वीडियो में <queries>
एलिमेंट के हिस्से के तौर पर, नीचे दिया गया <intent>
एलिमेंट
मेनिफ़ेस्ट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.media.browse.MediaBrowserService" /> </intent>
कस्टम फ़ंक्शन उपलब्ध कराएं
अगर आपके ऐप्लिकेशन को पसंद के मुताबिक बनाई जा सकने वाली कार्रवाइयां करनी हैं या ऐप्लिकेशन को पसंद के मुताबिक बनाना है
अन्य ऐप्लिकेशन के साथ इसके इंटरैक्शन के आधार पर जानकारी दी जाती है, तो
इंटेंट फ़िल्टर का इस्तेमाल करके पसंद के मुताबिक व्यवहार
हस्ताक्षर के तौर पर मार्क करना होगा
भाग <queries>
तत्व का होना चाहिए. इन सेक्शन में
में कई सामान्य स्थितियों के बारे में बताया गया है.
एसएमएस वाले ऐप्लिकेशन के लिए क्वेरी
अगर आपके ऐप्लिकेशन को
उदाहरण के लिए, यह देखने के लिए कि डिवाइस का डिफ़ॉल्ट एसएमएस हैंडलर कौनसा ऐप्लिकेशन है,
<queries>
एलिमेंट के हिस्से के तौर पर, यहां दिया गया <intent>
एलिमेंट शामिल करें
आपका मेनिफ़ेस्ट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.SENDTO"/> <data android:scheme="smsto" android:host="*" /> </intent>
पसंद के मुताबिक शेयरशीट बनाना
जब भी हो सके, सिस्टम से मिले
शेयरशीट में से एक विकल्प होता है. इसके अलावा,
<queries>
एलिमेंट के हिस्से के तौर पर, यहां दिया गया <intent>
एलिमेंट शामिल करें
आपका मेनिफ़ेस्ट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.SEND" /> <!-- Replace with the MIME type that your app works with, if needed. --> <data android:mimeType="image/jpeg" /> </intent>
आपके ऐप्लिकेशन के लॉजिक में शेयरशीट बनाने की प्रोसेस, जैसे कि
queryIntentActivities()
, अन्य मामलों में
Android 11 से पहले के वर्शन हों.
कस्टम टेक्स्ट चुनने से जुड़ी कार्रवाइयां दिखाएं
जब उपयोगकर्ता आपके ऐप्लिकेशन में टेक्स्ट चुनते हैं, तो टेक्स्ट को चुनना
टूलबार
चुने गए टेक्स्ट पर की जाने वाली संभावित कार्रवाइयों का सेट दिखाता है. अगर यह
टूलबार में, दूसरे ऐप्लिकेशन से होने वाली कस्टम कार्रवाइयां दिखती हैं. इनमें ये शामिल करें
आपके मेनिफ़ेस्ट में <queries>
एलिमेंट के हिस्से के तौर पर <intent>
एलिमेंट:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.PROCESS_TEXT" /> <data android:mimeType="text/plain" /> </intent>
किसी संपर्क के लिए कस्टम डेटा पंक्तियां दिखाएं
ऐप्लिकेशन कस्टम डेटा जोड़ सकते हैं पंक्तियों को सेवा देने वाली कंपनी. संपर्क ऐप्लिकेशन इस कस्टम डेटा को दिखा सके, इसके लिए ज़रूरी है कि ये काम किए जा सकते हैं:
contacts.xml
फ़ाइल को अन्य ऐप्लिकेशन से पढ़ें.- कस्टम MIME टाइप के मुताबिक आइकॉन लोड करें.
अगर आपका ऐप्लिकेशन, संपर्कों की सूची वाला ऐप्लिकेशन है, तो इसमें ये <intent>
एलिमेंट शामिल करें
<queries>
तत्व में से:
<!-- Place inside the <queries> element. --> <!-- Lets the app read the contacts.xml file from other apps. --> <intent> <action android:name="android.accounts.AccountAuthenticator" /> </intent> <!-- Lets the app load an icon corresponding to the custom MIME type. --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="content" android:host="com.android.contacts" android:mimeType="vnd.android.cursor.item/*" /> </intent>