जिस तरह कोई ऐप्लिकेशन, दूसरे ऐप्लिकेशन को डेटा भेज सकता है उसी तरह उसे दूसरे ऐप्लिकेशन से भी डेटा मिल सकता है. इस बारे में सोचें कि उपयोगकर्ता आपके ऐप्लिकेशन से कैसे इंटरैक्ट करते हैं और आपको दूसरे ऐप्लिकेशन से किस तरह का डेटा चाहिए. उदाहरण के लिए, हो सकता है कि किसी सोशल नेटवर्किंग ऐप्लिकेशन को किसी दूसरे ऐप्लिकेशन से दिलचस्प वेब यूआरएल जैसा टेक्स्ट कॉन्टेंट चाहिए हो.
अन्य ऐप्लिकेशन के उपयोगकर्ता, Android शेयरशीट या इंटेंट रिज़ॉल्वर के ज़रिए अक्सर आपके ऐप्लिकेशन पर डेटा भेजते हैं. आपके ऐप्लिकेशन को डेटा भेजने वाले ऐप्लिकेशन को, उस डेटा के लिए एमआईएम टाइप सेट करना होगा. आपके ऐप को किसी अन् य ऐप से नीचे दिए गए तरीकों से डेटा मिल सकता है:
- मेनिफ़ेस्ट में, मिलते-जुलते
intent-filter
टैग वालाActivity
- आपके ऐप्लिकेशन की ओर से पब्लिश किए गए शॉर्टकट शेयर करना.
सीधे शेयर करने के टारगेट, आपके ऐप्लिकेशन में किसी खास गतिविधि के डीप लिंक होते हैं. अक्सर, ये किसी व्यक्ति या ग्रुप को दिखाते हैं. साथ ही, Android शेयरशीट में इन्हें दिखाया जाता है. उदाहरण के लिए, कोई मैसेजिंग ऐप्लिकेशन किसी व्यक्ति के लिए डायरेक्ट शेयर टारगेट उपलब्ध करा सकता है. यह टारगेट, उस व्यक्ति के साथ सीधे तौर पर बातचीत करने के लिए डीप लिंक करता है. ज़्यादा जानकारी के लिए, डायरेक्ट शेयर टारगेट देना देखें.
काम करने वाले MIME टाइप
आम तौर पर, ऐप्लिकेशन में कई तरह के MIME टाइप होने चाहिए.
उदाहरण के लिए, टेक्स्ट, इमेज, और वीडियो भेजने के लिए डिज़ाइन किया गया मैसेजिंग ऐप्लिकेशन, text/*
, image/*
, और video/*
को पाने के लिए सबसे सही होता है. यहां Android में आसान डेटा भेजने और पाने के लिए, कुछ सामान्य MIME टाइप दिए गए हैं.
ईमेल पाने वाले लोग, | भेजने वाले लोगों ने भेजा |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
इस्तेमाल किए जा सकने वाले फ़ाइल एक्सटेंशन | application/pdf |
MIME मीडिया टाइप की आधिकारिक रजिस्ट्री IANA देखें.
शेयर करने के लिए बेहतरीन टारगेट तय करना
जब कोई उपयोगकर्ता किसी खास गतिविधि से जुड़े शेयर टारगेट पर टैप करता है, तो वे शेयर किए गए कॉन्टेंट का इस्तेमाल करने से पहले उसकी पुष्टि कर सकते हैं और उसमें बदलाव कर सकते हैं. यह टेक्स्ट डेटा के लिए खास तौर पर ज़रूरी है.
किसी गतिविधि के साथ डेटा पाना
किसी गतिविधि के साथ डेटा पाने में, मेनिफ़ेस्ट को अपडेट करना, आने वाले कॉन्टेंट को मैनेज करना, और यह पक्का करना शामिल है कि उपयोगकर्ता आपके ऐप्लिकेशन को पहचानता हो.
अपना मेनिफ़ेस्ट अपडेट करना
इंटेंट फ़िल्टर, सिस्टम को यह बताते हैं कि ऐप्लिकेशन का कौनसा कॉम्पोनेंट कौनसे इंटेंट स्वीकार करता है.
जिस तरह आपने दूसरे ऐप्लिकेशन को आसान डेटा भेजना लेसन में 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 टाइप सेट किया गया हो या भेजी जा रही इमेज बहुत बड़ी हो. साथ ही, मुख्य ("यूज़र इंटरफ़ेस") थ्रेड के बजाय, अलग थ्रेड में बाइनरी डेटा प्रोसेस करना न भूलें.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... when { intent?.action == Intent.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 == Intent.ACTION_SEND_MULTIPLE && intent.type?.startsWith("image/") == true -> { handleSendMultipleImages(intent) // Handle multiple images being sent } else -> { // Handle other intents, such as being started from the home screen } } ... } private fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { // Update UI to reflect text being shared } } private fun handleSendImage(intent: Intent) { (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let { // Update UI to reflect image being shared } } private fun handleSendMultipleImages(intent: Intent) { intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM)?.let { // Update UI to reflect multiple images being shared } }
Java
void onCreate (Bundle savedInstanceState) { ... // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } else if (type.startsWith("image/")) { handleSendImage(intent); // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // Update UI to reflect text being shared } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Update UI to reflect image being shared } } void handleSendMultipleImages(Intent intent) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // Update UI to reflect multiple images being shared } }
डेटा मिलने के बाद यूज़र इंटरफ़ेस (यूआई) को अपडेट करना उतना ही आसान हो सकता है जितना कि किसी EditText
को पॉप्युलेट करना. इसके अलावा, यह ज़्यादा मुश्किल भी हो सकता है, जैसे कि किसी इमेज पर दिलचस्प फ़ोटो फ़िल्टर लागू करना. इसके बाद क्या होगा, यह आपके ऐप्लिकेशन पर निर्भर करता है.
पक्का करें कि उपयोगकर्ता आपके ऐप्लिकेशन को पहचान पाएं
Android शेयरशीट और इंटेंट रिज़ॉल्वर में, आपके ऐप्लिकेशन को उसके आइकॉन और लेबल से दिखाया जाता है. इन दोनों की जानकारी मेनिफ़ेस्ट में दी गई है. ज़्यादा जानकारी देने के लिए, गतिविधि या इंटेंट फ़िल्टर लेबल सेट किए जा सकते हैं.
Android 10 (एपीआई लेवल 29) से, Android शेयरशीट सिर्फ़ आपके application
टैग के मेनिफ़ेस्ट में सेट किए गए आइकॉन का इस्तेमाल करती है. Android, intent-filter
और activity
टैग पर सेट किए गए आइकॉन को अनदेखा कर देता है.