2011-09-27 13 views
13

या क्या मुझे कॉल जानने के इरादे में कुछ अतिरिक्त डेटा भेजना चाहिए? यदि कोई पूर्वनिर्धारित विधि नहीं है, जैसे getIntent और इसके साथ कुछ करें?कैसे पता चलेगा कि किसी गतिविधि को startActivityForResult का उपयोग करके बुलाया जाता है या जिसे स्टार्टएक्टिविटी का उपयोग करके बुलाया जाता है?

उत्तर

55

मैं इस सवाल का पता पहले से ही उत्तर है, लेकिन मैं एक बेहतर है समाधान ..

जब आपकी गतिविधि शुरू हुई थी एड startActivity() द्वारा getCallingActivity() लक्ष्य गतिविधि में विधि null वापस आ जाएगी। जब इसे startActivityForResult() द्वारा बुलाया गया था तो यह कॉलिंग गतिविधि का नाम वापस कर देगा। अधिक जानकारी के लिए

getCallingActivity देखें।

तो आप कॉलिंग गतिविधि के लिए परिष्करण से पहले गतिविधि में जांच सकते हैं। यदि परिणाम शून्य है तो startActivity() द्वारा गतिविधि को बुलाया गया था और यदि परिणाम शून्य नहीं है तो गतिविधि startActivityForResult() द्वारा बुलाया गया था। बस।

उदाहरण: -

if (getCallingActivity() == null) { 
    //This Activity was called by startActivity 
} else { 
    //This Activity was called by startActivityForResult 
} 
+0

इरादे के माध्यम से ध्वज की तुलना में एक क्लीनर समाधान है ... धन्यवाद – WarrenFaith

+0

@WarrenFaith धन्यवाद। –

+0

कृपया ध्यान दें कि 'प्रारंभिक गतिविधि का गतिविधि लॉन्च मोड' सिंगल टास्क 'या' सिंगल इंस्टेंस 'है, या 'FLAG_ACTIVITY_NEW_TASK' से शुरू हुआ है, तो' कॉलिंग एक्टिविटी() 'रिटर्न' शून्य 'प्राप्त करें। – EpicPandaForce

3

आप इसे "0" और "1" जैसे ध्वज डाल सकते हैं, इसे इरादे में डाल सकते हैं, इसलिए अगर "0" तो इसकी शुरुआत एक्टिविटी या "1" स्टार्ट एक्टिविटीफॉर रिसेट के लिए ... यह आसान है, है ना?

+0

इस तरह के गन्दा क्योंकि आप और अधिक डेटा की तुलना में आप वास्तव में जरूरत है संभाल है। @ पंकजकुमार से नीचे का जवाब सबसे साफ संभव है। – WarrenFaith

6

मुझे लगता है कि आपको अपने मैनिफेस्ट में एक ही गतिविधि के लिए कई इरादों का पर्दाफाश करना चाहिए, फिर अपने व्यवहार को अनुकूलित करने के लिए कॉलिंग मंशा का परीक्षण करें। अपनी गतिविधि onCreate में

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <action android:name="android.intent.action.EDIT" /> 
    <action android:name="android.intent.action.PICK" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 

और इसी कोड: प्रकट में अपनी गतिविधि को लक्ष्य फ़िल्टर के लिए

उदाहरण

if (getIntent().getAction().equals(Intent.ACTION_VIEW)) { 
     // do whatever you need to do here 
} else if (getIntent().getAction().equals(Intent.ACTION_PICK)){ 
... 
} 
+0

यह भी एक गड़बड़ दृष्टिकोण – Harinder

संबंधित मुद्दे