Android में बैटरी स्तर और स्थिति प्राप्त करें


109

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


कुछ और शोध के बाद, मैंने BatteryManager.EXTRA_LEVEL पाया।
मोहित देशपांडे

यहाँ बैटरी प्रतिशत प्राप्त करने के लिए इस विधि की जाँच करें freakyjolly.com/android-useful-methods-and-functions/#5method
कोड जासूस

जवाबों:


124

यहां एक कोड नमूना है जो बताता है कि बैटरी की जानकारी कैसे प्राप्त करें।

इसे जमा करने के लिए, ACTION_BATTERY_CHANGEDइरादे के लिए एक प्रसारण रिसीवर गतिशील रूप से सेट किया गया है, क्योंकि यह मैनिफेस्टों में घोषित घटकों के माध्यम से प्राप्त नहीं किया जा सकता है, केवल इसके लिए स्पष्ट रूप से पंजीकरण करके Context.registerReceiver()

public class Main extends Activity {
  private TextView batteryTxt;
  private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context ctxt, Intent intent) {
      int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
      batteryTxt.setText(String.valueOf(level) + "%");
    }
  };

  @Override
  public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.main);
    batteryTxt = (TextView) this.findViewById(R.id.batteryTxt);
    this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
  }
}

2
Intent.ACTION_BATTERY_CHANGED के बारे में: यह एक चिपचिपा प्रसारण है जिसमें चार्जिंग स्टेट, स्तर और बैटरी के बारे में अन्य जानकारी होती है। आप इसे स्पष्ट रूप से Context.registerReceiver () के साथ इसके लिए पंजीकरण करके, मैनिफ़ेस्ट में घोषित घटकों के माध्यम से प्राप्त नहीं कर सकते हैं।
कक्षा Android

2
@classAndroid अच्छी तरह से, हाँ, यह स्पष्ट रूप से उत्तर में कहा गया है।
सिडराइजर

हां @SirDarius, बस दूसरों को इसके बारे में बताने दें। मैंने आपके उत्तर को पहले दिया और जब मुझे पता चला तो यह टिप्पणी की। :)
क्लास एंड्रॉइड

13
भूलकर भी ऑनरजिस्टर या ऑनडेस्ट्रॉय न करें।
डेव डोगा ओज

नए कीवर्क के साथ बैटरी प्रबंधक को स्थापित करने में सक्षम नहीं हो सकता, क्यों साहब?
सुभाषचंद्रु

102

API 21 के बाद से वर्तमान बैटरी स्तर को प्रतिशत के रूप में प्राप्त करने के लिए निम्नलिखित का उपयोग करना संभव हो गया है:

BatteryManager bm = (BatteryManager)getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

65

आधिकारिक एंड्रॉइड डॉक्स के आधार पर , आप वर्तमान बैटरी प्रतिशत प्राप्त करने के लिए हेल्पर या यूटिल क्लास में इस पद्धति का उपयोग कर सकते हैं:

public static int getBatteryPercentage(Context context) {

    if (Build.VERSION.SDK_INT >= 21) {

         BatteryManager bm = (BatteryManager) context.getSystemService(BATTERY_SERVICE);
         return bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

    } else {

         IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
         Intent batteryStatus = context.registerReceiver(null, iFilter);

         int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1;
         int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1;

         double batteryPct = level / (double) scale;

         return (int) (batteryPct * 100);
   }
}

आधिकारिक डॉक्स में एक गलती, आपको फ़्लोट इंट लेवल = बैटरीस्टैटस! = अशक्त के बजाय डबल का उपयोग करना चाहिए? BatteryStatus.getIntExtra (BatteryManager.EXTRA_LEVEL, -1): -1; int पैमाना = BatteryStatus! = null BatteryStatus.getIntExtra (BatteryManager.EXTRA_SCALE, -1): -1; double batteryPct = (double) level / (double) scale; int प्रतिशत = (int) (BatteryPct * 100D);
user2212515

2
@ user2212515, क्या आप आधिकारिक डॉक्स के आधार पर मेरे उत्तर को संपादित करेंगे?
०४:१18

@Ryan, मैंने android v21 और बाद में समर्थन करने के लिए अपना उत्तर संपादित किया। कृपया यह देखें।
9

14

आपको एक वास्तविक प्रसारण रजिस्टर करने की आवश्यकता नहीं है क्योंकि Android का BatteryManager एक चिपचिपा इरादे का उपयोग कर रहा है:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, ifilter);

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

return (int)(batteryPct*100);

यह आधिकारिक डॉक्स से https://developer.android.com/training/monitoring-device-state/battery-monitoring.html पर है


7

प्रतिशत में शेष शुल्क प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं।

private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                batterLevel.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

5

इस फ़ंक्शन को किसी भी तरह की अनुमति या किसी भी पुनर्मिलन की आवश्यकता नहीं है

void getBattery_percentage()
{
      IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
      Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter);
      int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
      int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
      float batteryPct = level / (float)scale;
      float p = batteryPct * 100;

      Log.d("Battery percentage",String.valueOf(Math.round(p)));
  }

4

बैटरी प्रतिशत की जांच करने के लिए हम बैटरी मैनजर का उपयोग करते हैं , निम्न विधि बैटरी प्रतिशत लौटाएगी।

स्रोत लिंक

public static float getBatteryLevel(Context context, Intent intent) {
    Intent batteryStatus = context.registerReceiver(null,
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int batteryLevel = -1;
    int batteryScale = 1;
    if (batteryStatus != null) {
        batteryLevel = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, batteryLevel);
        batteryScale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, batteryScale);
    }
    return batteryLevel / (float) batteryScale * 100;
}

हे मैंने इसका इस्तेमाल किया और कभी-कभी इसका परिणाम 89 होता है। कभी-कभी इसका 00.89 होता है, जो कि घटते-बढ़ते व्हाट्सएप पर चला जाता है
पेम्बा तमांग

1
private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                mBtn.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

1

आधिकारिक डॉक्स में एक गलती, आपको फ्लोट के बजाय डबल का उपयोग करना चाहिए। क्योंकि 0.53F * 100F = 52F

int level = batteryStatus != null ? 
batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1; int scale = 
batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1; 
double batteryPct = (double) level / (double) scale; int percent = (int) (batteryPct * 100D);

नहीं है कि 0.53F -> 52F गलती करने के लिए अंतिम मूल्य कास्टिंग के कारण int (इस प्रकार किसी भी दशमलव 0.x मान से अलग करना), बजाय Math.round () का उपयोग कर?
रोबर्ट

0

अन्य उत्तरों में बैटरी की स्थिति (क्रेजिंग या नहीं) का उपयोग करने का उल्लेख नहीं किया गया है ।

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.