Android 开发:显示电池电量

Posted

技术标签:

【中文标题】Android 开发:显示电池电量【英文标题】:Android Development: Show Battery Level 【发布时间】:2011-07-03 17:23:58 【问题描述】:

我一直在寻找这个,只发现真正搞砸的东西。 没有一种简单的方法可以在吐司或 Textview 上显示 21% 的电池电量吗? 或者我怎样才能做到这一点?

//西蒙

【问题讨论】:

android Battery in SDK的可能重复 如果你想从文件系统中读取它,你可以从默认为 50 的 /sys/class/power_supply/battery/capacity 中获取。 【参考方案1】:

要立即获取电池电量,请致电:

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

(注意:凭记忆输入,如有需要请调整)

这将返回一个Intent,其中包含BatteryManager 类中记录的各种附加内容。使用BatteryManager.EXTRA_LEVELBatteryManager.EXTRA_SCALE 确定剩余百分比。

如果您需要在一段时间内了解电池更换情况,请使用@Augusto 在他的回答中概述的BroadcastReceiver 方法。

【讨论】:

【参考方案2】:

如果您的意思是更改模拟器上的电池状态,请执行以下操作。通过 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 提到的页面上所说的去做,然后使用处理程序来显示敬酒。这是您需要添加到活动中的代码。

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

    
;

【讨论】:

对不起,我的意思是像 BatteyManager.getLevel() 但没有。所以基本上只是显示我手机上有多少电池电量 @Augusto:理想情况下,使用BatteryManager.EXTRA_LEVEL 而不是"level"。此外,该级别不是百分比。它是一个介于 0 到 BatteryManager.EXTRA_SCALE extra 的值之间的值。在许多设备上,比例 100,但不要假设。 别忘了注册接收者:this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); :)【参考方案3】:
    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) + "%";
    

【讨论】:

【参考方案4】:

你可以使用它。

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】:

我使用了这样的组合:

 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;

我这样做是因为在带有棉花糖“batLevel”的 Nexus 5 设备上总是返回 0。这样就彻底解决了!

祝你好运

【讨论】:

以上是关于Android 开发:显示电池电量的主要内容,如果未能解决你的问题,请参考以下文章

在android中自动更新电池电量

Android 怎样控制电量百分比是不是显示

为啥我的 Android 应用程序会耗尽电池电量?

我的 Android 应用程序正在耗尽电池电量吗?

android6.0系统Healthd分析及低电量自动关机流程

如何在 Android 的后台监控电池电量?