Android开发:显示电池电量

4

我一直在寻找这个答案,但只找到了非常混乱的信息。 有没有一种简单的方法可以在toast或TextView上显示电池电量,比如21%? 或者我该如何实现这一功能呢?

//Simon


可能是Android SDK中的电池问题的重复。 - Ted Hopp
如果您想从文件系统中读取它,可以从/sys/class/power_supply/battery/capacity获取,默认值为50。 - JPM
5个回答

14
要立即获取电池电量,请调用:
registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

注意:我从记忆中输入了这个代码,请根据需要进行调整。

这将返回一个具有BatteryManager类中记录的各种额外信息的Intent。使用BatteryManager.EXTRA_LEVELBatteryManager.EXTRA_SCALE来确定剩余电量的百分比。

如果您需要随着电池变化而知道一段时间,可以使用@Augusto在他的回答中概述的BroadcastReceiver方法。


10

如果你想要改变模拟器上的电池状态,可以按照以下步骤进行。通过 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
>

啊,好吧,你可以按照Ted所提到的页面上的说明进行操作,然后使用处理程序来显示一个toast。这是你需要添加到活动中的代码。

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

    }
};

抱歉,我的意思是像BatteryManager.getLevel()这样的方法,但实际上并没有。所以基本上只是显示我手机上有多少电量百分比。 - carefacerz
3
最好使用BatteryManager.EXTRA_LEVEL代替"level"。另外,电量值并不是百分比,而是一个从0到BatteryManager.EXTRA_SCALE的值。在许多设备中,刻度确实是100,但不能假定为是。 - CommonsWare
不要忘记注册接收器: this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); :) - Victor

6
    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
我使用了这样的组合:
 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;
}

我这样做是因为在一个安装了Marshmallow的Nexus 5设备上,“batLevel”总是返回0。这完全解决了问题!

祝好运


0

你可以使用这个。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接