2013-04-01 18 views
30

का उपयोग कर केवल एक बार बैटरी स्तर प्राप्त करें मैंने वेब पर खोज की है और मेरे प्रश्न का उत्तर नहीं मिला। मेरी समस्या बैटरी स्तर की जानकारी केवल एक बार प्राप्त करना है, उदाहरण के लिए। फ़ंक्शन getBatteryLevel() पर कॉल करना। ऐसे समाधान हैं जिन्हें BroadcastReceiver का उपयोग करके कार्यान्वित किया गया है, लेकिन जैसा कि मुझे पता है कि बैटरी स्तर की परिवर्तन घटना पर हर बार इसे कॉल किया जाएगा। कृपया, मुझे बताएं कि मैं केवल एक बार यह जानकारी कैसे प्राप्त कर सकता हूं?एंड्रॉइड एसडीके

+4

'ब्रॉडकास्ट रिसीवर' का उपयोग करें और फिर एक बार जब आप रिसीवर को अनियंत्रित कर लें तो एक बार मूल्य प्राप्त हो जाए। – TronicZomB

उत्तर

96

Intent.ACTION_BATTERY_CHANGED प्रसारण "चिपचिपा प्रसारण" के रूप में जाना जाता है। चूंकि यह चिपचिपा है, इसलिए आप ब्रॉडकास्ट के लिए एक नल रिसीवर के साथ पंजीकरण कर सकते हैं जो आपको registerReceiver पर कॉल करते समय केवल बैटरी स्तर एक प्राप्त करेगा।

एक समारोह अद्यतन प्राप्त कुछ इस तरह दिखेगा बिना बैटरी स्तर प्राप्त करने के लिए:

public float getBatteryLevel() { 
    Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

    // Error checking that probably isn't needed but I added just in case. 
    if(level == -1 || scale == -1) { 
     return 50.0f; 
    } 

    return ((float)level/(float)scale) * 100.0f; 
} 

अधिक डेटा इस स्टिकी प्रसारण से खींचा जा सकता है। batteryIntent लौटाकर आप BatteryManager कक्षा में उल्लिखित अन्य एक्स्ट्रा कलाकारों तक पहुंच सकते हैं।

+0

इस विधि को अब रिसीवर (उदा। विजेट) से जोड़ने के लिए नहीं कहा जा सकता है। क्या आप बैटरी स्तर प्राप्त करने के किसी भी अन्य तरीके से जानते हैं जिसे विजेट की ऑनअपडेट() विधि से किया जा सकता है? –

+1

यदि आप इसे विजेट से कर रहे हैं, तो आपको 'रजिस्टर रिसीवर' को कॉल करने की आवश्यकता होगी: 'getAplicationContext()। रजिस्टर रीसीवर (...)' इसके लिए काम करने के लिए। – MCeley

+0

मेरे पास एक संदर्भ है और इसे कॉल कर सकते हैं, लेकिन कॉलर को रिसीवर के भीतर से अनुमति नहीं दी जाती है, इसे पहले पैरामीटर "रिसीवर" के रूप में पास या शून्य कर दिया जाता है। लॉग संदेश बहुत स्पष्ट है कि आप एक रिसीवर के भीतर से कॉल नहीं कर सकते हैं। –

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