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

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

अन्य ऐप्लिकेशन के उपयोगकर्ता, Android Sharesheet या इंटेंट रिज़ॉल्वर की मदद से, आपके ऐप्लिकेशन में अक्सर डेटा भेजते हैं. आपके ऐप्लिकेशन को डेटा भेजने वाले ऐप्लिकेशन को उस डेटा का MIME प्रकार. आपका ऐप्लिकेशन किसी दूसरे ऐप्लिकेशन से भेजा गया डेटा पा सकता है: इन तरीकों से मदद पाएं:

  • मेनिफ़ेस्ट में, मिलते-जुलते intent-filter टैग वाला Activity
  • आपके ऐप्लिकेशन की ओर से पब्लिश किए गए शॉर्टकट शेयर करना.

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

काम करने वाले MIME टाइप

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

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

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

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

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