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_LEVEL
和BatteryManager.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 开发:显示电池电量的主要内容,如果未能解决你的问题,请参考以下文章