2012-01-24 18 views
7

गूगल से C2DM नमूना कोड में, जब एक अधिसूचना BroadcastReceiver में recived वे कहते हैं:ब्रॉडकास्ट रिसीवर में setResult क्यों कॉल करें?

setResult(Activity.RESULT_OK, null /* data */, null /* extra */);

मुझे नहीं पता था क्या setResult है। एंड्रॉइड डॉक्स में वे यही कहते हैं:

इस प्रसारण से लौटाए गए सभी परिणाम डेटा को बदलें; केवल Context.sendOrderedBroadcast के माध्यम से भेजे गए प्रसारण के साथ काम करता है। सभी वर्तमान परिणाम डेटा को इस विधि को दिए गए मान से प्रतिस्थापित किया गया है।

क्या कोई बता सकता है कि उनका क्या मतलब है और मुझे इसे कॉल करने की आवश्यकता क्यों है?

पूरा कोड:

public class C2DMBaseReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     C2DMReceiver.runIntentInService(); 
     setResult(Activity.RESULT_OK, null /* data */, null /* extra */); 
    } 
} 

उत्तर

9

BroadcastReceiver में setResult(...) विधि, ट्रैकिंग उद्देश्यों के लिए इसकी भी चीज से ज्यादा।

यदि आप Activity की विधि setResult(...) से परिचित हैं, तो आप इस विधि को उसी तरह प्रसारित करने के बारे में सोच सकते हैं। लेकिन बजाय setResult(...) विधि गतिविधियों के मामले में onActivityResult(int requestCode, int resultCode, Intent data) की तरह एक कॉलबैक विधि हो रही, प्रसारण की, एक निश्चित क्रम में प्रसारण के परिणाम का ट्रैक रखने के लिए किया जाता है यही कारण है कि documentation कहते है:

केवल प्रसारण के साथ काम करता है Context.sendOrderedBroadcast के माध्यम से भेजा गया। सभी वर्तमान परिणाम डेटा को इस विधि को दिए गए मान से प्रतिस्थापित किया गया है।

इसका मतलब है कि आप तरीकों getResultCode(), getResultData() या getResultExtras() के उपयोग पता है कि कैसे चीजों को अलग BroadcastReceiver पंजीकृत अपने प्रसारण को संभालने के लिए सभी में onReceive(Context, Intent) विधि के निष्पादन के दौरान चला गया कर सकते हैं। तो आप पिछले BroadcastReceiver में कोड निष्पादन के परिणाम को जान सकते हैं जिसे वर्तमान में सभी रिसीवर के साथ निष्पादित किया गया है।

यह केवल Context.sendOrderedBroadcast() कहते हैं क्योंकि sendBroadcast(...) विधि के लिए एक नियमित फोन के रूप में अच्छी तरह से एक ही मंशा सुन एक और धागा अन्य रिसीवर में कोड निष्पादित करने के लिए शुरू करने से पहले इसके निष्पादन पूरा करने के लिए 1 रिसीवर के लिए इंतजार नहीं कर सकता है।

+0

+1 .. –

-1

setResult() विधि कॉलिंग उद्देश्य में परिणाम का उपयोग करने के लिए सेट करता है। मान लीजिए कि आपने स्टार्टएक्टिविटीफॉर रिसेट (इरादा, कोड) का उपयोग करके किसी अन्य गतिविधि से अपना कस्टम रिसीवर बुलाया है, फिर उसी गतिविधि में ऑनएक्टिविटी रिसेट() विधि में आप कॉल की गई गतिविधि से प्राप्त परिणामों का उपयोग कर सकते हैं, केवल तभी जब कोई setResult() विधि हो एक और गतिविधि। यह इरादे के माध्यम से एक गतिविधि को कॉल करने का एक तरीका है और परिणाम एक ही गतिविधि पर वापस प्राप्त करें।

-1

उदाहरण: आपकी मुख्य गतिविधि में, आप एक अनुरोध कोड के साथ एक गतिविधि शुरू करते हैं। आपका मुख्य परिणाम इस गतिविधि के अंत में परिणाम देता है।

startActivityForResult (Intent intent, int requestCode); 

अपने काम के अंत में, नई गतिविधि एक परिणाम कोड (काम एक किया, काम बी ... आदि) और एक आशय (आवश्यक नहीं) करता है और कॉल समाप्त करने के लिए के साथ खुद को खत्म ()।

void setResult (int resultCode, Intent data); 

आपका मुख्य गतिविधि funciton onActivityResult के साथ इस परिणाम हो जाता है()। यह अनुरोध कोड को जांचता है कि कौन सा काम निष्पादित किया गया है और इस काम का परिणाम/राज्य प्राप्त करने के लिए। (और डेटा, अगर कोई इरादा इंतजार किया गया था, लेकिन डेटा भी परिणाम कोड हो सकता है)।

void onActivityResult(int requestCode, int resultCode, Intent data); 

आशा है कि मैंने आपकी मदद की है। स्पष्टीकरण के लिए