2012-02-03 8 views
5

सिस्टम को ज्ञात प्रसारण रिसीवर बनाने के दो तरीके हैं: कोई इसे इस तत्व के साथ मेनिफेस्ट फ़ाइल में घोषित करता है। दूसरा जावा कोड में गतिशील रूप से रिसीवर बनाने के लिए है।मैनिफेस्ट फ़ाइल में घोषित बैटरी प्रसारण रिसीवर काम नहीं करता है?

अब, रिसीवर जावा कोड में गतिशील रूप से बनाया गया है और यह सामान्य रूप से काम करता है। लेकिन क्यों पहला तरीका "मैनिफेस्ट फ़ाइल में घोषित" विफल रहा?

क्या कोई सफलता के लिए है?

धन्यवाद।

AndroidManifest.xml

<receiver android:name="pj.batteryinfo.BatteryReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BATTERY_CHANGED"></action> 
    </intent-filter> 
</receiver> 

उत्तर

4

कुछ कार्रवाई के लिए, आप केवल जावा कोड में BroadcastReceiver घोषित कर सकता है। यह BATTERY_CHANGED एक्शन और SCREEN_ON, SCREEN_OFF तक जहां तक ​​मुझे पता है, ऐसा होता है।

जब आप Manifest.xml फ़ाइल में ब्रॉडकास्ट रिसीवर घोषित करते हैं, इससे कोई फर्क नहीं पड़ता कि आपका ऐप चल रहा है या नहीं, ब्रॉडकास्ट रिसीवर जागृत हो जाएगा और इस प्रकार onReceive विधि को कॉल किया जाएगा।

क्यों? मुझे लगता है कि ऐसा इसलिए है क्योंकि BATTERY_CHANGED कार्रवाई बहुत आम है और यदि आप इसे घोषणापत्र में घोषित कर सकते हैं, तो सिस्टम अक्सर बहुत सारे प्रसारण भेजता है और इस प्रकार बैटरी नाटकीय रूप से उपभोग करता है, हालांकि, जब आप घोषित करते हैं कोड में, ब्रॉडकास्ट रिसीवर केवल तब प्रभावी होगा जब गतिविधि चल रही है और इस प्रकार अत्यधिक बैटरी खपत से बचें। बैटरी को बचाने के लिए, एंड्रॉइड फ़ाइल में ऐसे कार्यों को पंजीकृत करने की अनुमति नहीं देता है।

यह मेरा अनुमान है। मुझे इस पर कोई आधिकारिक स्पष्टीकरण नहीं मिला। एक डेवलपर के रूप में, मैं बस उनके पीछे कारणों के बजाय, ऐसे कार्यों को याद करता हूं।

+1

ओह .. मैं 'क्यों' जानना चाहता हूं। जवाब के लिए धन्यवाद! – Sodino

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