परिचय: दूसरे ऐप से Activity क्यों कॉल करें?
\n\nकल्पना करें कि आप एक नोट्स ऐप बना रहे हैं, और अपने इंटरफ़ेस से सीधे फोटो लेने की सुविधा देना चाहते हैं। या, मान लीजिए, आपका मैसेंजर एड्रेस बुक से कॉन्टैक्ट खोलने में सक्षम होना चाहिए। दोनों ही मामलों में, आपको Android में किसी दूसरे ऐप से Activity लॉन्च करनी होगी।
\n\nयह कार्य Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है (हज़ारों व्यू और सैकड़ों वोट)। और यह सही भी है: यदि इसे गलत तरीके से किया जाए, तो ऐप ActivityNotFoundException के साथ क्रैश हो सकता है, या इससे भी बुरा, सुरक्षा खतरा पैदा हो सकता है। इस ट्यूटोरियल में, हम Kotlin भाषा में सभी बारीकियों को समझेंगे, ताकि आप अपने प्रोजेक्ट्स में बाहरी स्क्रीन को आत्मविश्वास से एकीकृत कर सकें।
वैसे, आप PythonLib वेबसाइट पर हैं, जहाँ हम अक्सर Python के बारे में बात करते हैं, लेकिन आज एक विशेष मामला है। Kotlin पर Android डेवलपमेंट एक शक्तिशाली कौशल है जो Python पर बैकएंड के साथ अच्छी तरह से मेल खाता है। चलिए शुरू करते हैं!
\n\nIntent क्या है और यह समाधान की कुंजी क्यों है?
\n\nAndroid में Intent एक संदेश है जो सिस्टम को बताता है: "अरे, मुझे इस क्रिया के साथ कुछ करना है।" दूसरे ऐप से Activity लॉन्च करने के लिए दो दृष्टिकोण उपयोग किए जाते हैं:
\n\n- \n
- स्पष्ट Intent — आप ठीक-ठीक जानते हैं कि आप किस घटक को लॉन्च करना चाहते हैं (उदाहरण:
com.example.target.MainActivity)। यह तभी काम करता है जब आपके पास उस ऐप के कोड तक पहुँच हो। \n - अंतर्निहित Intent — आप वर्णन करते हैं कि आप क्या करना चाहते हैं (उदाहरण: "निर्देशांक के अनुसार मानचित्र खोलें"), और सिस्टम स्वयं उपयुक्त ऐप ढूंढता है। यह बाहरी Activity को कॉल करने का अधिक लचीला और सुरक्षित तरीका है। \n
हम अंतर्निहित Intent पर ध्यान केंद्रित करेंगे, क्योंकि इनका उपयोग अक्सर Android अंतर-प्रक्रिया संचार के लिए किया जाता है।
\n\nमूल उदाहरण: निर्देशांक के अनुसार मानचित्र खोलना
\n\nआइए एक सरल उदाहरण से शुरू करें जो दर्शाता है कि मानचित्र प्रदर्शित करने के लिए दूसरे ऐप से Activity कैसे लॉन्च करें।
\n\n// Kotlin\nval gmmIntentUri = Uri.parse("geo:55.7558,37.6173?z=15")\nval mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)\nmapIntent.setPackage("com.google.android.apps.maps")\n\n// जाँचें कि क्या कोई ऐप है जो Intent को संभाल सकता है\nif (mapIntent.resolveActivity(packageManager) != null) {\n startActivity(mapIntent)\n} else {\n // उपयोगकर्ता को त्रुटि संदेश दिखाएँ\n Toast.makeText(this, "Google मानचित्र स्थापित नहीं है", Toast.LENGTH_SHORT).show()\n}\n\nयहाँ क्या हो रहा है? हम ACTION_VIEW क्रिया और निर्देशांक वाले URI के साथ एक Intent बना रहे हैं। फिर setPackage का उपयोग करके, हम स्पष्ट रूप से बता रहे हैं कि हम Google मानचित्र का उपयोग करना चाहते हैं (हालाँकि यह आवश्यक नहीं है — सिस्टम एक विकल्प प्रस्तुत कर सकता है)। सबसे महत्वपूर्ण बात resolveActivity के माध्यम से जाँच है। यह डिवाइस पर आवश्यक ऐप न होने पर क्रैश होने से बचाता है।
परिदृश्य: कैमरा कॉल करना और परिणाम प्राप्त करना
\n\nअब हम एक अधिक जटिल मामले पर आते हैं — दूसरे ऐप से Activity लॉन्च करना और परिणाम की प्रतीक्षा करना। एक क्लासिक उदाहरण: फोटो लेना और उसे अपने ऐप में प्राप्त करना।
\n\n// Kotlin\nprivate const val REQUEST_IMAGE_CAPTURE = 1\n\nprivate fun dispatchTakePictureIntent() {\n val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)\n // जाँचें कि कैमरा उपलब्ध है\n if (takePictureIntent.resolveActivity(packageManager) != null) {\n startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)\n } else {\n // त्रुटि प्रबंधन: कैमरा नहीं मिला\n }\n}\n\noverride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n super.onActivityResult(requestCode, resultCode, data)\n if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {\n val imageBitmap = data?