Разработка Android: Показать уровень заряда батареи - PullRequest
4 голосов
/ 03 июля 2011

Я искал это и только нашел действительно испорченные вещи.Разве нет простого способа показать уровень заряда батареи как 21% на тосте или в Textview?Или как мне этого добиться?

// Simon

Ответы [ 5 ]

14 голосов
/ 03 июля 2011

Чтобы получить уровень заряда батареи прямо сейчас, позвоните:

registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

(примечание: введите это из памяти, пожалуйста, настройте при необходимости)

Это вернет Intent сразличные дополнения, документированные в классе BatteryManager.Используйте BatteryManager.EXTRA_LEVEL и BatteryManager.EXTRA_SCALE для определения оставшегося процента.

Если вам необходимо узнать в течение определенного периода времени, как меняется батарея, используйте подход BroadcastReceiver @Augusto, изложенный в его ответе.

10 голосов
/ 03 июля 2011

если вы имеете в виду изменение состояния батареи на эмуляторе, сделайте следующее.Подключитесь к эмулятору через telnet и измените статус и емкость

> telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
power ac off
OK
power discharging
OK
power capacity 21
OK
exit
>

А, ну, вы можете сделать то, что написано на странице, упомянутой Тедом, а затем использовать обработчик, чтобы показать тост.Это код, который нужно добавить в свою деятельность.

private Handler handler = new Handler;

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(final Context context, Intent intent) {
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
        Log.i(TAG, "level: " + level + "; scale: " + scale);
        int percent = (level*100)/scale;

        final String text = String.valueOf(percent) + "%";
        handler.post( new Runnable() {

            public void run() {
                Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
            }
        });

    }
};
6 голосов
/ 09 апреля 2014
    public static String batteryLevel(Context context)
    {
        Intent intent  = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));   
        int    level   = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        int    scale   = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
        int    percent = (level*100)/scale;
        return String.valueOf(percent) + "%";
    }
0 голосов
/ 25 октября 2018

Я использовал такую ​​комбинацию:

 BatteryManager bm = (BatteryManager) getActivity().getSystemService(BATTERY_SERVICE);
 int batLevel = 100;
 int level;
 int scale;
 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
      batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
 }
 if(batLevel == 0){
     Intent intent  = getActivity().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
     level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
     scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
     batLevel = (level*100)/scale;
}

Я сделал это так, потому что на устройстве Nexus 5 с Marshmallow "batLevel" всегда возвращал 0.Это решило это полностью!

Удачи

0 голосов
/ 06 ноября 2015

Вы можете использовать это.

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);
    }
...