2012-07-22 36 views
5
@Override 
public void onReceive(Context context, Intent intent) { 
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 
    BatteryManager.BATTERY_STATUS_UNKNOWN); 

    if (status == BatteryManager.BATTERY_STATUS_CHARGING 
     || status == BatteryManager.BATTERY_STATUS_FULL) 
     Toast.makeText(context, "Charging!", Toast.LENGTH_SHORT).show(); 
    else 
     Toast.makeText(context, "Not Charging!", Toast.LENGTH_SHORT).show(); 
} 

मैनिफ़ेस्ट: इस कोड मेंबैटरी स्थिति हमेशा चार्ज नहीं हो रहा

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

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

+0

थेरेस कुछ अपने intent.getIntExtra साथ कुछ गड़बड़ है, जाँच जहां इस विधि से कहा जा रहा है और सुनिश्चित करें कि आप सही पैरामीटर – John

+0

के साथ इरादा स्थापित कर रहे हैं आप क्या स्थिति प्राप्त कर रहे हैं? – zmbq

+0

@ जॉन मैं इसे अपने मैनिफेस्ट में उपयोग कर रहा हूं। –

उत्तर

6

आप मेनिफेस्ट के माध्यम से ACTION_BATTERY_CHANGED के लिए पंजीकरण नहीं कर सकते हैं, इसलिए आपको उन प्रसारण प्राप्त नहीं हो रहे हैं। आप Intents से एक्स्ट्रा प्राप्त करने का प्रयास कर रहे हैं जिनमें उन अतिरिक्त नहीं हैं (उदा।, ACTION_POWER_CONNECTED)। नतीजतन, आपको BATTERY_STATUS_UNKNOWN का डिफ़ॉल्ट मान मिल रहा है।

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
Intent batteryStatus = context.registerReceiver(null, ifilter); 
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 

'स्थिति' अब 1 और 5 के बीच कोई मान होगा::

+0

तो मैं इसे प्रोग्रामेटिक रूप से कैसे पंजीकृत करूं? –

+0

@ मोहित देशपांडे: 'रजिस्टर रिसीवर()' पर कॉल करें, वैसे ही आप किसी अन्य 'ब्रॉडकास्ट रिसीवर' को प्रोग्रामेटिक रूप से पंजीकृत करेंगे। देखें: https://github.com/commonsguy/cw-omnibus/tree/master/SystemEvents/OnBattery – CommonsWare

2

निम्नलिखित का प्रयास करें

1 = Unknown 
2 = Charging 
3 = Discharging 
4 = Not Charging 
5 = Full 

आपका कोड:

if (status == BatteryManager.BATTERY_STATUS_CHARGING 
    || status == BatteryManager.BATTERY_STATUS_FULL) ... 

लिखा जा सकता है:

if (status == 2 || status == 5) ... 

दोनों समान हैं क्योंकि BatteryManager.BATTERY_STATUS_CHARGING एक निरंतर कि हमेशा के बराबर होती है 2 है, और BatteryManager.BATTERY_STATUS_FULL एक निरंतर कि हमेशा के बराबर होती है 5.

+0

अच्छा उत्तर, लेकिन कृपया कोड में जादू संख्याओं का उपयोग न करें: http://stackoverflow.com/questions/47882/what -is-ए-जादू-संख्या और क्यों है यह बुरा – kellogs

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

  • कोई संबंधित समस्या नहीं^_^