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

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

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

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

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

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 टाइप सेट किया जाए या भेजी जा रही इमेज बहुत बड़ी हो सकती है. साथ ही, बाइनरी डेटा को प्रोसेस करना न भूलें मुख्य ("UI") थ्रेड के बजाय एक अलग थ्रेड में.

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 Sharesheet और इंटेंट रिज़ॉल्वर में, आपके ऐप्लिकेशन को उसके आइकॉन और लेबल से दिखाया जाता है. इन दोनों की जानकारी मेनिफ़ेस्ट में दी गई है. ज़्यादा जानकारी देने के लिए, गतिविधि या इंटेंट फ़िल्टर लेबल सेट किए जा सकते हैं.

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