अन्य ऐप्लिकेशन को आपकी गतिविधि शुरू करने की अनुमति दें

अगर आपके ऐप्लिकेशन में ऐसी कार्रवाई की जा सकती है जो किसी दूसरे ऐप्लिकेशन के लिए काम की हो सकती है, इसे कार्रवाई के अनुरोधों पर प्रतिक्रिया देने के लिए, सही इंटेंट फ़िल्टर का इस्तेमाल करें.

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

पहला डायग्राम. चुनने वाला डायलॉग.

अन्य ऐप्लिकेशन इस तरह से आपकी गतिविधि शुरू कर सकें, इसके लिए आपको <intent-filter> जोड़ना होगा आपकी मेनिफ़ेस्ट फ़ाइल में, उससे जुड़े <activity> एलिमेंट के लिए एलिमेंट.

जब आपका ऐप्लिकेशन किसी डिवाइस पर इंस्टॉल हो जाता है, तो सिस्टम आपके इंटेंट की पहचान कर लेता है फ़िल्टर करता है और जानकारी को इंस्टॉल किए गए सभी ऐप्लिकेशन के साथ काम करने वाले इंटेंट के इंटरनल कैटलॉग में जोड़ता है. जब कोई ऐप्लिकेशन startActivity() या startActivityForResult() को कॉल करता है यह सिस्टम, ऐसी गतिविधियों की जांच करता है जो इंटेंट.

इंटेंट फ़िल्टर जोड़ें

आपकी गतिविधि किन इंटेंट को हैंडल कर सकती है, यह तय करने के लिए हर इंटेंट फ़िल्टर बनाएं किस तरह की कार्रवाई और डेटा के हिसाब से, ज़्यादा से ज़्यादा सटीक हो स्वीकार करता है.

किसी गतिविधि को सिस्टम, दिए गए Intent का डेटा भेज सकता है. ऐसा तब होता है, जब उस गतिविधि में एक ऐसा इंटेंट फ़िल्टर जो Intent ऑब्जेक्ट की इन शर्तों को पूरा करता है:

कार्रवाई
की जाने वाली कार्रवाई को नाम देने वाली स्ट्रिंग. आम तौर पर, यह प्लैटफ़ॉर्म के तय की गई वैल्यू में से एक होती है. जैसे ACTION_SEND या ACTION_VIEW के तौर पर.

इसे अपने इंटेंट फ़िल्टर में, <action> एलिमेंट के साथ डालें. इस एलिमेंट में तय की गई वैल्यू, कार्रवाई के लिए स्ट्रिंग का पूरा नाम होना चाहिए, न कि एपीआई कॉन्स्टेंट, जैसा कि इस पेज पर दिए गए उदाहरणों में बताया गया है.

डेटा
इंटेंट से जुड़े डेटा की जानकारी.

इसे अपने इंटेंट फ़िल्टर में, <data> एलिमेंट के साथ डालें. किसी एक का उपयोग करना या ज़्यादा एट्रिब्यूट सबमिट करते हैं, तो आप MIME टाइप, यूआरआई प्रीफ़िक्स, यूआरआई स्कीम या इन कोड के साथ-साथ कुछ और ऐसे कॉम्बिनेशन जो डेटा टाइप को दिखाते हैं स्वीकार किया जाता है.

ध्यान दें: अगर आपको डेटा के बारे में खास जानकारी देने की ज़रूरत नहीं है Uri, जैसे कि जब आपकी गतिविधि मैनेज की जाती है अन्य प्रकार का "अतिरिक्त" डेटा, यूआरआई के बजाय, सिर्फ़ android:mimeType एट्रिब्यूट का इस्तेमाल करके, यह बताएं कि आपकी गतिविधि का डेटा मैनेज करता है, जैसे कि text/plain या image/jpeg.

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

इसे अपने इंटेंट फ़िल्टर में, <category> की मदद से डालें एलिमेंट.

इंटेंट फ़िल्टर में, आपके पास यह बताने का विकल्प होता है कि आपकी गतिविधि से कौनसी शर्तें स्वीकार की जाती हैं इनमें से हर एक के लिए, <intent-filter> में नेस्ट किए गए संबंधित एक्सएमएल एलिमेंट का एलान किया गया है एलिमेंट.

उदाहरण के लिए, यहां इंटेंट फ़िल्टर वाली एक गतिविधि दी गई है. यह डेटा टाइप टेक्स्ट या इमेज के रूप में होने पर, ACTION_SEND इंटेंट को हैंडल करती है:

<activity android:name="ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
        <data android:mimeType="image/*"/>
    </intent-filter>
</activity>

अहम जानकारी: अगर आपको चुनने वाले डायलॉग बॉक्स में मौजूद आइकॉन को अलग रखना है अपनी गतिविधि के डिफ़ॉल्ट आइकॉन से, <intent-filter> में android:icon जोड़ें एलिमेंट.

आने वाले हर इंटेंट में सिर्फ़ एक कार्रवाई और एक डेटा टाइप के बारे में बताया गया है. हालांकि, कई तरह के डेटा के बारे में एलान किया जा सकता है हर एलिमेंट में <action>, <category>, और <data> एलिमेंट के इंस्टेंस <intent-filter>.

अगर दो कार्रवाइयों का जोड़ा और डेटा, दोनों अलग-अलग हैं, तो इनके व्यवहार के लिए, अलग-अलग इंटेंट फ़िल्टर बनाएं. इससे यह तय करने में मदद मिलती है कि कौनसी कार्रवाइयां स्वीकार की जा सकती हैं किस डेटा टाइप के साथ जोड़े जाते हैं.

उदाहरण के लिए, मान लें कि आपकी गतिविधि, ACTION_SEND और ACTION_SENDTO, दोनों इंटेंट के लिए टेक्स्ट और इमेज, दोनों को हैंडल करती है. इस मामले में, आपको दो अलग-अलग इंटेंट फ़िल्टर है, क्योंकि ACTION_SENDTO इंटेंट को यह तय करने के लिए Uri डेटा का इस्तेमाल करना होगा send या sendto यूआरआई स्कीम का इस्तेमाल करके, पाने वाले व्यक्ति का पता. यह नीचे दिए गए उदाहरण में दिखाया गया है:

<activity android:name="ShareActivity">
    <!-- Filter for sending text; accepts SENDTO action with sms URI schemes -->
    <intent-filter>
        <action android:name="android.intent.action.SENDTO"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="sms" />
        <data android:scheme="smsto" />
    </intent-filter>
    <!-- Filter for sending text or images; accepts SEND action and text or image data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="image/*"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

ध्यान दें: इंप्लिसिट इंटेंट पाने के लिए, आपको इंटेंट फ़िल्टर में CATEGORY_DEFAULT कैटगरी. startActivity() और startActivityForResult() में सभी इंटेंट का इस्तेमाल ऐसे किया जाता है जैसे वे CATEGORY_DEFAULT श्रेणी का एलान किया गया. अगर नीति का एलान नहीं किया जाता है, तो का इस्तेमाल करते हैं, तो कोई भी इंप्लिसिट इंटेंट आपकी गतिविधि का समाधान नहीं करता है.

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

अपनी गतिविधि के मकसद को मैनेज करें

अपनी गतिविधि में क्या कार्रवाई की जाए, यह तय करने के लिए इसे शुरू करने के लिए, Intent का इस्तेमाल किया गया.

गतिविधि शुरू होते ही, getIntent() पर कॉल करके Intent ने गतिविधि शुरू की. इस दौरान ऐसा कभी भी किया जा सकता है गतिविधि का लाइफ़साइकल, लेकिन आप आम तौर पर शुरुआती कॉलबैक के दौरान ऐसा करते हैं, जैसे onCreate() या onStart().

यह नीचे दिए गए उदाहरण में दिखाया गया है:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.main)

    val data: Uri? = intent?.data

    // Figure out what to do based on the intent type
    if (intent?.type?.startsWith("image/") == true) {
        // Handle intents with image data
    } else if (intent?.type == "text/plain") {
        // Handle intents with text
    }
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    // Get the intent that started this activity
    Intent intent = getIntent();
    Uri data = intent.getData();

    // Figure out what to do based on the intent type
    if (intent.getType().indexOf("image/") != -1) {
        // Handle intents with image data
    } else if (intent.getType().equals("text/plain")) {
        // Handle intents with text
    }
}

नतीजा दिखाएं

अगर आपको उस गतिविधि का कोई नतीजा चाहिए जिससे आपकी ट्रिगर हुई थी, तो setResult() पर कॉल करके, नतीजे का कोड और Intent नतीजा बताएं. जब आपकी कार्रवाई पूरी होती है और उपयोगकर्ता मूल पेज पर वापस आ जाता है गतिविधि, इसके लिए finish() को कॉल करें बंद करें और आपकी गतिविधि को नष्ट करें. यह नीचे दिए गए उदाहरण में दिखाया गया है:

Kotlin

// Create intent to deliver some kind of result data
Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri")).also { result ->
    setResult(Activity.RESULT_OK, result)
}
finish()

Java

// Create intent to deliver some kind of result data
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"));
setResult(Activity.RESULT_OK, result);
finish();

आपको हमेशा नतीजे के साथ एक कोड तय करना होगा. आम तौर पर, यह RESULT_OK या RESULT_CANCELED होता है. इसके बाद आप ज़रूरत पड़ने पर Intent के साथ ज़्यादा डेटा दें.

ध्यान दें: नतीजा इस पर सेट है RESULT_CANCELED डिफ़ॉल्ट रूप से. इसलिए, अगर उपयोगकर्ता 'वापस जाएं' बटन पर टैप करता है, बटन पर क्लिक करें और नतीजा सेट करने से पहले, ओरिजनल गतिविधि को "रद्द किया गया" नतीजा.

अगर आपको बस एक ऐसा पूर्णांक वापस करना है जो नतीजे के कई विकल्पों में से किसी एक को दिखाता है, तो नतीजे के कोड को 0 से ज़्यादा किसी भी वैल्यू पर सेट करें. अगर पूर्णांक बनाने के लिए नतीजे के कोड का इस्तेमाल किया जाता है और Intent को शामिल करने की ज़रूरत नहीं है, आप setResult() को कॉल कर सकती हैं और सिर्फ़ नतीजा कोड पास करें:

Kotlin

setResult(RESULT_COLOR_RED)
finish()

Java

setResult(RESULT_COLOR_RED);
finish();

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

ध्यान दें: आपको यह देखने की ज़रूरत नहीं है कि आपकी गतिविधि शुरू हुई या नहीं startActivity() या startActivityForResult() के साथ. अगर आपने इस गतिविधि को शुरू किया है, तो setResult() पर कॉल करें नतीजे की उम्मीद कर सकता है. अगर मूल गतिविधि को startActivityForResult() कहा जाता है, तो सिस्टम इसे डिलीवर करता है आपने setResult() को जो नतीजा दिया है; ऐसा न करने पर, नतीजे को अनदेखा कर दिया जाता है.