मैं बैटरी स्तर और स्थिति (प्लग इन, डिस्चार्जिंग, चार्जिंग आदि) कैसे प्राप्त कर सकता हूं? मैंने डेवलपर डॉक्स पर शोध किया और मुझे बैटरी मैनजर क्लास मिली। लेकिन इसमें कोई भी तरीका नहीं है, सिर्फ स्थिरांक। मैं इसका उपयोग कैसे करूं?
मैं बैटरी स्तर और स्थिति (प्लग इन, डिस्चार्जिंग, चार्जिंग आदि) कैसे प्राप्त कर सकता हूं? मैंने डेवलपर डॉक्स पर शोध किया और मुझे बैटरी मैनजर क्लास मिली। लेकिन इसमें कोई भी तरीका नहीं है, सिर्फ स्थिरांक। मैं इसका उपयोग कैसे करूं?
जवाबों:
यहां एक कोड नमूना है जो बताता है कि बैटरी की जानकारी कैसे प्राप्त करें।
इसे जमा करने के लिए, 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));
}
}
आधिकारिक एंड्रॉइड डॉक्स के आधार पर , आप वर्तमान बैटरी प्रतिशत प्राप्त करने के लिए हेल्पर या यूटिल क्लास में इस पद्धति का उपयोग कर सकते हैं:
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);
}
}
आपको एक वास्तविक प्रसारण रजिस्टर करने की आवश्यकता नहीं है क्योंकि 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 पर है ।
प्रतिशत में शेष शुल्क प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं।
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);
}
इस फ़ंक्शन को किसी भी तरह की अनुमति या किसी भी पुनर्मिलन की आवश्यकता नहीं है
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)));
}
बैटरी प्रतिशत की जांच करने के लिए हम बैटरी मैनजर का उपयोग करते हैं , निम्न विधि बैटरी प्रतिशत लौटाएगी।
स्रोत लिंक
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;
}
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);
}
आधिकारिक डॉक्स में एक गलती, आपको फ्लोट के बजाय डबल का उपयोग करना चाहिए। क्योंकि 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);
अन्य उत्तरों में बैटरी की स्थिति (क्रेजिंग या नहीं) का उपयोग करने का उल्लेख नहीं किया गया है ।
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;