2011-02-22 5 views
5

के साथ इरादों का निर्माण करना मैं कुछ समय से putExtra() का उपयोग करके इरादों का निर्माण कर रहा हूं और केवल एंड्रॉइड दस्तावेज में पढ़ता हूं कि मुझे पैकेज नाम के साथ 'नाम' उपसर्ग करना चाहिए। तो, 'putExtra ("बटनटेक्स्ट", "ओके") के बजाय' यह 'putExtra ("com.mycompany.myapplication.ButtonText", "ठीक") की तरह होना चाहिए।putExtra

क्या यह वास्तव में आवश्यक है? (इसके बिना ठीक लगता है)।

यदि आवश्यक है तो इसका क्या फायदा है?

साथ ही, पैकेज नाम कॉलर या जिसे कॉल किया जा रहा है? यदि यह कॉलर्स है जिसे 'गतिविधि कहा जाता है' को कॉलर्स नाम के बारे में जानना है जो बहुत सामान्य नहीं होगा।

धन्यवाद

उत्तर

7

क्या यह वास्तव में आवश्यक है? (इसके बिना ठीक लगता है)।

नहीं, यह नहीं आवश्यक है एक पूरी तरह से स्टैंड-अलोन अनुप्रयोग के लिए लेकिन फिर भी अच्छा अभ्यास माना जा सकता है।

यह उन ऐप्स में अधिक महत्वपूर्ण है जो सार्वजनिक रूप से उपलब्ध हैं ताकि वे बातचीत कर सकें लेकिन विशिष्ट रूप से पहचानने वाले डेटा और डेटा का आदान-प्रदान करने का कोई तरीका बनाए रख सकें। जिसके लिए पैकेज नाम का उपयोग किया जाता है, संदर्भ पर निर्भर करेगा।

एक सार उदाहरण के लिए ...

कंपनी एक एक ऐप्लिकेशन जो जो कंपनी बी और कंपनी सी द्वारा निर्मित ऐप्स का उपयोग कर सकते डाटा प्रोसेसिंग के कुछ प्रकार प्रदान कर सकते हैं पैदा करता है। इरादे के लिए 'कार्रवाई' को कंपनी ए के लिए प्रासंगिक नाम दिया जाएगा, लेकिन दो 'क्लाइंट' ऐप्स द्वारा पारित डेटा क्लाइंट ऐप्स कंपनियों के लिए प्रासंगिक होगा। उदाहरण ...

अप्पा के डॉक्स ...

To request data processing use: 
com.companyA.intent.action.PROCESS_DATA 

Pass data with the above intent as an extra named: 
<your package name>.SOME_DATA 

अब जब अप्पा के प्रासंगिक घटक ऊपर के साथ कहा जाता है, यह एक नाम जो .SOME_DATA साथ समाप्त होता है के साथ है कि एक 'अतिरिक्त' की जाँच करेगा लेकिन यह अद्वितीय उपसर्ग के कारण अन्य ऐप्स द्वारा प्रदान किए गए अन्य डेटा से अलग डेटा को बनाए रखने में भी सक्षम होगा। तो ...

कंपनी बी कोड

Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA); 
i.putExtra(com.companyB.SomeApp.SOME_DATA, data); 

कंपनी सी कोड

Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA); 
i.putExtra(com.companyC.SomeOtherApp.SOME_DATA, data); 

ठीक है, संभवतः मेरी बेहतर उदाहरणों में से एक नहीं है, लेकिन क्या यह यह महत्वपूर्ण है है करने के लिए नीचे आता है कैसे को देखने के लिए एंड्रॉइड पर्यावरण एक दूसरे का उपयोग करने, डेटा पास करने और उस डेटा के स्रोत के लिए विशिष्ट रूप से पहचाने जाने योग्य विभिन्न अनुप्रयोग घटकों के बारे में बहुत कुछ है।

+0

धन्यवाद, यह एक बहुत साफ करता है कि अप। एक छोटा सा बिंदु है जो मुझे आपके उदाहरण में नहीं मिलता है। - क्या यह माना जाता है कि "com.companyB.SomeApp.SOME_DATA" कोई विशेष प्रकार है (उदा। स्ट्रिंग)? मुझे लगता है कि यह एक स्ट्रिंग है और कंपनी ए के कोड को पहले 'डॉट' समेत सभी चीजों को ट्रिम करना है? यदि ऐसा है, तो इसे कंपनी ए, बी और सी (स्पष्ट रूप से) द्वारा 'समझ' जाना होगा। – steve

+0

@steve: putExtra फॉर्म का उपयोग करता है (स्ट्रिंग नाम, मान) जहां 'नाम' दोनों पक्षों पर समझा जाना चाहिए - 'मान' अलग-अलग प्रकार (int, string और so) हो सकता है। मेरा उदाहरण इस बात पर आधारित था कि ऐप्स प्रसारण के बजाए सीधे संवाद कैसे कर सकता है (जैसे "मेरे पास एक छवि फ़ाइल है, जो जानता है कि इसे कैसे खोलें?" इरादा का प्रकार)। अपने स्वयं के अनुप्रयोग घटकों के बीच डेटा पास करने का मतलब है कि उन्हें यह जानने की ज़रूरत है कि 'अतिरिक्त' का अर्थ क्या है, लेकिन डेवलपर्स के लिए हमेशा ऐसे ऐप्स बनाने की संभावना है जो अन्य डेवलपर प्रकाशित दस्तावेज़ों के आधार पर उपयोग कर सकते हैं – Squonk

+0

धन्यवाद @MisterSquonk, मैं समझता हूं। मुझे लगता है कि इस तरह की चीज के लिए एक अच्छा पैटर्न हमेशा 'एक्स्ट्रा' में पूरी तरह से योग्य 'नाम' के साथ एक बंडल पारित करना होगा। फिर, बंडल में अलग-अलग मूल्यों के छोटे नाम हो सकते हैं क्योंकि यह स्पष्ट होगा कि कॉलर बंडल के नाम पर आधारित था। यह पार्स करना और कोड में भी पढ़ना आसान होगा। बेशक आप डेटा के हर टुकड़े को अर्हता प्राप्त कर सकते हैं लेकिन यह मेरे लिए बहुत अधिक लगता है ... धन्यवाद फिर से (और अन्य टिप्पणीकारों के लिए भी धन्यवाद) – steve

3

यह एक वास्तविक आवश्यकता की तुलना में एक "सर्वोत्तम प्रथाओं" बात की तरह अधिक लग रहा है। यहां आपको जो लाभ मिलता है वह यह है कि यदि आप सामान्य उद्देश्यों में बहुत सी चीजें हैं जो कई अनुप्रयोगों में फैले कई गतिविधियों द्वारा संभाले जाते हैं, तो आप अपने इरादे के डेटा के बारे में अधिक विशिष्ट हैं। यदि आप इन उद्देश्यों का उपयोग केवल अपने आवेदन में आंतरिक रूप से कर रहे हैं और केवल आपकी गतिविधियां ही उन्हें संभालने में हैं, तो आप ठीक तरह से हैं।

1

मुझे लगता है कि यह एक बढ़िया विचार है यदि आप अपने विस्तारित डेटा को एक serializable वर्ग में com.mycompany.myapp कहते हैं।MyAppData और के रूप में यह भेजने:

intent.putExtra("com.mycompany.myapp.MyAppData",myAppData); //==> out 

और के रूप में यह पुन: प्राप्त करने:

MyAppData myAppData= (com.mycompany.myapp.MyAppData)intent.getSerializableExtra("com.mycompany.myapp.MyAppData",myAppData; // <== in 

जेएएल

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