我正在尝试编写一个java函数,从/ proc / acpi / battery / BAT0 / {state info}获取电池信息。
虽然我确实有合理的输出,只要我的电池没有插入并且充满电,我注意到一个问题是在完全充电并插入电源时发生的。
状态文件中的剩余容量高于在info文件中找到的上一个完整容量值。 两个输出是 的/ proc / ACPI /电池/ BAT0 /信息
present: yes
design capacity: 7800 mAh
last full capacity: 5488 mAh
battery technology: rechargeable
design voltage: 11100 mV
design capacity warning: 780 mAh
design capacity low: 236 mAh
cycle count: 0
capacity granularity 1: 78 mAh
capacity granularity 2: 78 mAh
model number: DELL PD6857
serial number: 1857
battery type: LION
OEM info: SMP
的/ proc / ACPI /电池/ BAT0 /状态
present: yes
capacity state: ok
charging state: charging
present rate: 2668 mA
remaining capacity: 4422 mAh
present voltage: 12843 mV
问题在于,当我完全充电时,我的剩余容量是7800mAh,这是我的设计容量但是当从AC取下时剩余容量下降并且我的presen速率跳跃使剩余容量等于或低于我的最后满负荷。
问题是如何解决权力问题。
根据这两个文件中的信息,我如何使用java创建一个计时器,以确定电池充满之前剩余的时间以及电池电量耗尽前的剩余时间。
这是我在java代码中的函数。
public static int currentCharge(){
double currentPercent=0;
int lastFullCapacityInt=0;
int remainingCapacityInt=0;
try{
BufferedReader infoIn=new BufferedReader(new InputStreamReader(new FileInputStream(batteryInfo)));
BufferedReader stateIn=new BufferedReader(new InputStreamReader(new FileInputStream(batteryState)));
//first get "last full capacity" from info file.
String lastFullCapacity="";
while((lastFullCapacity=infoIn.readLine())!=null){
if(lastFullCapacity.contains("last full capacity")){
String[] s=lastFullCapacity.split(":");
String p=s[1].trim();
String[] pp=p.split(" ");
String ppp=pp[0].trim();
lastFullCapacityInt=Integer.parseInt(ppp);
}
}
infoIn.close();
//get current capacity from state file
String remainingCapacity="";
while((remainingCapacity=stateIn.readLine())!=null){
if(remainingCapacity.contains("remaining capacity")){
String[] s=remainingCapacity.split(":");
String p=s[1].trim();
String[] pp=p.split(" ");
String ppp=pp[0].trim();
remainingCapacityInt=Integer.parseInt(ppp);
}
}
stateIn.close();
} catch(Exception e){
}
currentPercent=(((double)remainingCapacityInt/lastFullCapacityInt)*100);
int c=(int)currentPercent;
double d=(currentPercent-c)*100;
if(((int)d)>50)
c+=1;
System.out.println(currentPercent);
return (c);
}
当我的电池充满电时,只想添加/ proc / acpi / battery / BAT0 /状态文件,这样每个人都可以看到我在说什么。
present: yes
capacity state: ok
charging state: charged
present rate: 1 mA
remaining capacity: 7800 mAh
present voltage: 13010 mV
下一次读数是在断开交流电源后大约20秒
present: yes
capacity state: ok
charging state: discharging
present rate: 1993 mA
remaining capacity: 5456 mAh
present voltage: 12650 mV
答案 0 :(得分:2)
您可能误读了info文件的内容。 present rate
和remaining capacity
不是以相同的单位来衡量的 - 前者是以毫安为单位的放电率,而后者是以毫安时为单位的容量。 (如果我们将电流作为距离,则相当于每小时英里数和英里数。)
因此,在给定放电率和剩余容量的情况下,您可以通过将容量除以速率来获得预测的“空闲时间”;由于这两个值是以毫安小时和毫安为单位测量的,因此结果以小时为单位。使用您的上一个信息文件作为示例,例如:
capacity = 5456 (mAh)
rate = 1993 (mA)
time left = 5456 / 1993 = 2.73 (hours)
关于为什么当您拔下机器电源时剩余容量突然下降的原因,可能是您的电池电量不足,或者机器的电池电量测量不是特别准确。