जिस तरह कोई ऐप्लिकेशन, अन्य ऐप्लिकेशन को डेटा भेज सकता है उसी तरह वह अन्य ऐप्लिकेशन से डेटा भी पा सकता है. सोचें कि उपयोगकर्ता आपके ऐप्लिकेशन से कैसे इंटरैक्ट करते हैं और आपको अन्य ऐप्लिकेशन से किस तरह का डेटा चाहिए. उदाहरण के लिए, किसी सोशल नेटवर्किंग ऐप्लिकेशन को किसी दूसरे ऐप्लिकेशन से टेक्स्ट कॉन्टेंट मिल सकता है. जैसे, कोई दिलचस्प वेब यूआरएल.
अन्य ऐप्लिकेशन के उपयोगकर्ता, Android की शेयरशीट या इंटेंट रिज़ॉल्वर के ज़रिए आपके ऐप्लिकेशन को अक्सर डेटा भेजते हैं. आपके ऐप्लिकेशन को डेटा भेजने वाले ऐप्लिकेशन को, उस डेटा के लिए MIME टाइप सेट करना होगा. आपका ऐप्लिकेशन, किसी दूसरे ऐप्लिकेशन से भेजे गए डेटा को इन तरीकों से पा सकता है:
- मेनिफ़ेस्ट में मौजूद
intent-filterटैग से मेल खाने वालाActivity - आपके ऐप्लिकेशन से पब्लिश किए गए शॉर्टकट शेयर करना.
डायरेक्ट शेयर के टारगेट, आपके ऐप्लिकेशन में किसी खास गतिविधि के डीप लिंक होते हैं. ये अक्सर किसी व्यक्ति या ग्रुप को दिखाते हैं. साथ ही, Android की शेयरशीट में इन्हें दिखाया जाता है. उदाहरण के लिए, कोई मैसेजिंग ऐप्लिकेशन किसी व्यक्ति के लिए डायरेक्ट शेयर का टारगेट उपलब्ध करा सकता है. इससे सीधे तौर पर उस व्यक्ति के साथ बातचीत शुरू की जा सकती है. ज़्यादा जानकारी के लिए, Direct Share के टारगेट उपलब्ध कराना देखें.
सपोर्ट किए जाने वाले MIME टाइप
आदर्श रूप से, किसी ऐप्लिकेशन को ज़्यादा से ज़्यादा MIME टाइप मिलनी चाहिए.
उदाहरण के लिए, टेक्स्ट, इमेज, और वीडियो भेजने के लिए डिज़ाइन किया गया मैसेजिंग ऐप्लिकेशन, text/*, image/*, और video/* पाने की सुविधा देता है. Android में सामान्य डेटा भेजने और पाने के लिए, यहां कुछ सामान्य एमआईएमई टाइप दिए गए हैं.
| ईमेल पाने वाले लोग इसके लिए रजिस्टर करते हैं | ईमेल भेजने वाले लोग |
|---|---|
text/* |
|
image/* |
|
video/* |
|
| इस्तेमाल किए जा सकने वाले फ़ाइल एक्सटेंशन | application/pdf |
एमआईएमई मीडिया टाइप की आईएएनए की आधिकारिक रजिस्ट्री देखें.
शेयर करने के लिए बेहतरीन टारगेट बनाना
जब कोई उपयोगकर्ता किसी गतिविधि से जुड़े शेयर टारगेट पर टैप करता है, तो उसके पास शेयर किए गए कॉन्टेंट का इस्तेमाल करने से पहले, उसकी पुष्टि करने और उसे बदलने का विकल्प होना चाहिए. यह खास तौर पर, टेक्स्ट डेटा के लिए ज़रूरी है.
किसी गतिविधि के साथ डेटा पाना
किसी गतिविधि के साथ डेटा पाने के लिए, आपको मेनिफ़ेस्ट अपडेट करना होगा, आने वाले कॉन्टेंट को हैंडल करना होगा, और यह पक्का करना होगा कि उपयोगकर्ता आपके ऐप्लिकेशन को पहचानता हो.
मेनिफ़ेस्ट अपडेट करना
इंटेंट फ़िल्टर, सिस्टम को यह बताते हैं कि ऐप्लिकेशन का कोई कॉम्पोनेंट किन इंटेंट को स्वीकार करता है.
अन्य ऐप्लिकेशन को सामान्य डेटा भेजना लेसन में, आपने ACTION_SEND कार्रवाई के साथ इंटेंट बनाया था. इसी तरह, इस कार्रवाई के साथ इंटेंट पाने के लिए इंटेंट फ़िल्टर बनाए जाते हैं. <intent-filter> एलिमेंट का इस्तेमाल करके, मेनिफ़ेस्ट में इंटेंट फ़िल्टर तय किया जाता है.
उदाहरण के लिए, अगर आपका ऐप्लिकेशन टेक्स्ट कॉन्टेंट पाने की सुविधा देता है, तो किसी भी तरह की एक या उससे ज़्यादा इमेज शामिल करने वाला मेनिफ़ेस्ट इस स्निपेट की तरह दिखेगा:
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity>
जब कोई दूसरा ऐप्लिकेशन, इनमें से किसी भी चीज़ को शेयर करने की कोशिश करता है, तो वह एक इंटेंट बनाता है और उसे startActivity() को पास करता है. इसके बाद, आपका ऐप्लिकेशन Android की शेयरशीट या इंटेंट रिज़ॉल्वर में एक विकल्प के तौर पर दिखता है. अगर उपयोगकर्ता आपका ऐप्लिकेशन चुनता है, तो इससे उससे जुड़ी गतिविधि शुरू हो जाती है (ऊपर दिए गए उदाहरण में .ui.MyActivity). इसके बाद, आपको अपने कोड और यूज़र इंटरफ़ेस (यूआई) में कॉन्टेंट को सही तरीके से मैनेज करना होगा.
आने वाले कॉन्टेंट को मैनेज करना
Intent से डिलीवर किए गए कॉन्टेंट को मैनेज करने के लिए, Intent ऑब्जेक्ट पाने के लिए getIntent() को कॉल करें. ऑब्जेक्ट मिलने के बाद, इसके कॉन्टेंट की जांच की जा सकती है. इससे यह तय किया जा सकता है कि आगे क्या करना है. अगर इस गतिविधि को सिस्टम के अन्य हिस्सों (जैसे कि लॉन्चर) से शुरू किया जा सकता है, तो इंटेंट की जांच करते समय इस बात का ध्यान रखें.
आने वाले डेटा की जांच करते समय ज़्यादा सावधानी बरतें. आपको कभी नहीं पता चलेगा कि कोई दूसरा ऐप्लिकेशन आपको क्या भेज सकता है. उदाहरण के लिए, हो सकता है कि गलत MIME टाइप सेट किया गया हो या भेजी जा रही इमेज बहुत बड़ी हो. साथ ही, बाइनरी डेटा को मुख्य ("UI") थ्रेड के बजाय किसी अलग थ्रेड में प्रोसेस करना न भूलें.
@Composable fun SharesheetHandler() { val context = LocalContext.current val intent = (context as? Activity)?.intent when (intent?.action) { ACTION_SEND -> { if ("text/plain" == intent.type) { handleSendText(intent) // Handle text being sent. } else if (intent.type?.startsWith("image/") == true) { handleSendImage(intent) // Handle single image being sent } } Intent.ACTION_SEND_MULTIPLE -> { if (intent.type?.startsWith("image/") == true) { handleSendMultipleImages(intent) // Handle multiple images being sent } } else -> { // Handle other intents, such as being started from the home screen } } } fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { // Update ViewModel state to change state of text being shared } } fun handleSendImage(intent: Intent) { IntentCompat.getParcelableExtra(intent, Intent.EXTRA_STREAM, Uri::class.java).let { // Update ViewModel state to change state of image being shared } } fun handleSendMultipleImages(intent: Intent) { IntentCompat.getParcelableArrayListExtra(intent, Intent.EXTRA_STREAM, Uri::class.java).let { // Update ViewModel state to change state of image(s) being shared } }
डेटा मिलने के बाद यूज़र इंटरफ़ेस (यूआई) को अपडेट करना, EditText को पॉप्युलेट करने जितना आसान हो सकता है. इसके अलावा, यह किसी इमेज पर दिलचस्प फ़ोटो फ़िल्टर लगाने जैसा ज़्यादा मुश्किल भी हो सकता है. इसके बाद, आपके ऐप्लिकेशन को तय करना होता है कि आगे क्या करना है.
स्क्रीनशॉट का यूआरएल शेयर करना
स्क्रीनशॉट लेते समय, स्क्रीनशॉट और उससे जुड़ा कोई भी यूआरएल शेयर किया जा सकता है.
इससे उपयोगकर्ताओं को बेहतर अनुभव मिलता है. यूआरएल पाने के दौरान, पक्का करें कि आपको इंटेंट से EXTRA_TEXT फ़ील्ड मिले. जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:
IntentCompat.getParcelableExtra(intent, Intent.EXTRA_STREAM, Uri::class.java).let { // Handle the EXTRA_TEXT as well val extraText = intent.getCharSequenceExtra(Intent.EXTRA_TEXT) // Update ViewModel state to change state image being shared and the EXTRA_TEXT // if available }
पक्का करें कि उपयोगकर्ताओं को आपका ऐप्लिकेशन पता हो
Android की शेयरशीट और इंटेंट रिज़ॉल्वर में, आपके ऐप्लिकेशन को उसके आइकॉन और लेबल से दिखाया जाता है. ये दोनों मेनिफ़ेस्ट में तय किए जाते हैं. ज़्यादा जानकारी देने के लिए, गतिविधि या इंटेंट फ़िल्टर के लेबल सेट किए जा सकते हैं.
Android 10 (एपीआई लेवल 29) से, Android Sharesheet सिर्फ़ उन आइकॉन का इस्तेमाल करती है जिन्हें आपके application टैग के मेनिफ़ेस्ट में सेट किया गया है. Android, intent-filter और activity टैग पर सेट किए गए आइकॉन को अनदेखा करता है.