我一直在寻找这个答案,但只找到了非常混乱的信息。 有没有一种简单的方法可以在toast或TextView上显示电池电量,比如21%? 或者我该如何实现这一功能呢?
//Simon
我一直在寻找这个答案,但只找到了非常混乱的信息。 有没有一种简单的方法可以在toast或TextView上显示电池电量,比如21%? 或者我该如何实现这一功能呢?
//Simon
registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
注意:我从记忆中输入了这个代码,请根据需要进行调整。
这将返回一个具有BatteryManager
类中记录的各种额外信息的Intent
。使用BatteryManager.EXTRA_LEVEL
和BatteryManager.EXTRA_SCALE
来确定剩余电量的百分比。
如果您需要随着电池变化而知道一段时间,可以使用@Augusto在他的回答中概述的BroadcastReceiver
方法。
如果你想要改变模拟器上的电池状态,可以按照以下步骤进行。通过 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.EXTRA_LEVEL
代替"level"
。另外,电量值并不是百分比,而是一个从0到BatteryManager.EXTRA_SCALE
的值。在许多设备中,刻度确实是100,但不能假定为是。 - CommonsWare 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) + "%";
}
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。这完全解决了问题!
祝好运
你可以使用这个。
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);
}