अन्य ऐप्लिकेशन से आसानी से डेटा पाएं

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

Compose Navigation का इस्तेमाल करने वाले ऐप्लिकेशन में, किसी दूसरे ऐप्लिकेशन से भेजे गए डेटा को पाने के लिए, यह दो चरणों वाली प्रोसेस अपनाई जाती है:

  1. मेनिफ़ेस्ट में <intent-filter> का एलान करें: आपको अब भी AndroidManifest.xml फ़ाइल में अपनी गतिविधि के लिए इंटेंट फ़िल्टर जोड़ना होगा. इससे Android OS को पता चलता है कि आपका ऐप्लिकेशन, कुछ कार्रवाइयां (जैसे, ACTION_SEND) और MIME टाइप (जैसे, text/plain) पाने में सक्षम है.

  2. अपने Compose Navigation ग्राफ़ में navDeepLink को तय करें: अपनी गतिविधि के onCreate या onNewIntent तरीकों में Intent को मैन्युअल तरीके से इंटरसेप्ट और पार्स करने के बजाय, Compose Navigation के डीप लिंक की सुविधा का इस्तेमाल करें. कार्रवाई और MIME टाइप से मेल खाने वाले navDeepLink को सीधे तौर पर उस कंपोज़ेबल डेस्टिनेशन से अटैच करें जिसमें कॉन्टेंट दिखाना है. NavController, Intent को अपने-आप इंटरसेप्ट कर लेगा और उपयोगकर्ता को सीधे उस स्क्रीन पर ले जाएगा.

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

एमआईएमई टाइप के साथ काम करने की सुविधा

आदर्श रूप से, किसी ऐप्लिकेशन को ज़्यादा से ज़्यादा MIME टाइप मिलनी चाहिए. उदाहरण के लिए, टेक्स्ट, इमेज, और वीडियो भेजने के लिए डिज़ाइन किया गया मैसेजिंग ऐप्लिकेशन, text/*, image/*, और video/* पाने की सुविधा देता है. Android में सामान्य डेटा भेजने और पाने के लिए, यहां कुछ सामान्य एमआईएमई टाइप दिए गए हैं.

ईमेल पाने वाले लोग इसके लिए रजिस्टर करते हैं ईमेल भेजने वाले लोग
text/*
  • text/plain
  • text/rtf
  • text/html
  • text/json
image/*
  • image/jpg
  • image/png
  • image/gif
video/*
  • video/mp4
  • video/3gp
इस्तेमाल किए जा सकने वाले फ़ाइल एक्सटेंशन 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() को कॉल करें. ऑब्जेक्ट मिलने के बाद, इसके कॉन्टेंट की जांच करके यह तय किया जा सकता है कि आगे क्या करना है. अगर इस गतिविधि को सिस्टम के अन्य हिस्सों (जैसे कि लॉन्चर) से शुरू किया जा सकता है, तो इंटेंट की जांच करते समय इस बात का ध्यान रखें.

आने वाले डेटा की जांच करते समय ज़्यादा सावधानी बरतें. आपको कभी नहीं पता चलेगा कि कोई दूसरा ऐप्लिकेशन आपको क्या भेज सकता है. उदाहरण के लिए, हो सकता है कि गलत एमआईएमई टाइप सेट किया गया हो या भेजी जा रही इमेज बहुत बड़ी हो. साथ ही, बाइनरी डेटा को मुख्य ("UI") थ्रेड के बजाय किसी अलग थ्रेड में प्रोसेस करना न भूलें.

@Composable
fun SharesheetHandler() {
    val activity = LocalActivity.current
    val intent = activity?.intent

    when (intent?.action) {
        Intent.ACTION_SEND -> {
            if (intent.type == "text/plain") {
                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
        }
    }
}

private fun handleSendText(intent: Intent) {
    intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
        // Update UI state with the shared text
    }
}

private fun handleSendImage(intent: Intent) {
    val imageUri = IntentCompat.getParcelableExtra(intent, Intent.EXTRA_STREAM, Uri::class.java)
    imageUri?.let {
        // Update UI state with the shared image
    }
}

private fun handleSendMultipleImages(intent: Intent) {
    val imageUris =
        IntentCompat.getParcelableArrayListExtra(intent, Intent.EXTRA_STREAM, Uri::class.java)
    imageUris?.let {
        // Update UI state with the shared images
    }
}

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

स्क्रीनशॉट का यूआरएल शेयर करना

स्क्रीनशॉट लेते समय, स्क्रीनशॉट और उससे जुड़ा कोई भी यूआरएल शेयर किया जा सकता है. इससे उपयोगकर्ताओं को बेहतर अनुभव मिलता है. यूआरएल पाने के दौरान, पक्का करें कि आपको इंटेंट से 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 UI state with the shared image and the EXTRA_TEXT if available
}

पक्का करें कि उपयोगकर्ताओं को आपका ऐप्लिकेशन पता हो

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

Android 10 (एपीआई लेवल 29) से, Android Sharesheet सिर्फ़ उन आइकॉन का इस्तेमाल करती है जो आपके application टैग के मेनिफ़ेस्ट में सेट किए गए हैं. Android, intent-filter और activity टैग पर सेट किए गए आइकॉन को अनदेखा करता है.