我需要在Windows系统中获取剩余的电池寿命。我该怎么做?如何在Windows系统中获得剩余电池寿命?
回答
我假设你正在谈论一台笔记本电脑。标准Java SE API中不存在这样的API。此信息仅在操作系统平台本机API中可用。您至少需要JNI或JNA(JavaWorld article)才能与平台本机API进行通信。
在Windows中,您需要登录SYSTEM_POWER_STATUS
structure。它提供了其中BatteryLifePercent
财产,这可能是你的利益。我在旧的forums.sun.com主题中发现了一个有用的基于JNA的代码片段,该主题目前不再可用。所以这个信用实际上就是作者的名字不可知的。
为了得到它的工作,首先在classpath下降jna.jar
然后将下面的类未修改复制到项目:
package com.example;
import java.util.ArrayList;
import java.util.List;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary;
public interface Kernel32 extends StdCallLibrary {
public Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("Kernel32", Kernel32.class);
/**
* @see http://msdn2.microsoft.com/en-us/library/aa373232.aspx
*/
public class SYSTEM_POWER_STATUS extends Structure {
public byte ACLineStatus;
public byte BatteryFlag;
public byte BatteryLifePercent;
public byte Reserved1;
public int BatteryLifeTime;
public int BatteryFullLifeTime;
@Override
protected List<String> getFieldOrder() {
ArrayList<String> fields = new ArrayList<String>();
fields.add("ACLineStatus");
fields.add("BatteryFlag");
fields.add("BatteryLifePercent");
fields.add("Reserved1");
fields.add("BatteryLifeTime");
fields.add("BatteryFullLifeTime");
return fields;
}
/**
* The AC power status
*/
public String getACLineStatusString() {
switch (ACLineStatus) {
case (0): return "Offline";
case (1): return "Online";
default: return "Unknown";
}
}
/**
* The battery charge status
*/
public String getBatteryFlagString() {
switch (BatteryFlag) {
case (1): return "High, more than 66 percent";
case (2): return "Low, less than 33 percent";
case (4): return "Critical, less than five percent";
case (8): return "Charging";
case ((byte) 128): return "No system battery";
default: return "Unknown";
}
}
/**
* The percentage of full battery charge remaining
*/
public String getBatteryLifePercent() {
return (BatteryLifePercent == (byte) 255) ? "Unknown" : BatteryLifePercent + "%";
}
/**
* The number of seconds of battery life remaining
*/
public String getBatteryLifeTime() {
return (BatteryLifeTime == -1) ? "Unknown" : BatteryLifeTime + " seconds";
}
/**
* The number of seconds of battery life when at full charge
*/
public String getBatteryFullLifeTime() {
return (BatteryFullLifeTime == -1) ? "Unknown" : BatteryFullLifeTime + " seconds";
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("ACLineStatus: " + getACLineStatusString() + "\n");
sb.append("Battery Flag: " + getBatteryFlagString() + "\n");
sb.append("Battery Life: " + getBatteryLifePercent() + "\n");
sb.append("Battery Left: " + getBatteryLifeTime() + "\n");
sb.append("Battery Full: " + getBatteryFullLifeTime() + "\n");
return sb.toString();
}
}
/**
* Fill the structure.
*/
public int GetSystemPowerStatus(SYSTEM_POWER_STATUS result);
}
这里是你如何使用它,例如在main()
方法:
ACLineStatus: Online Battery Flag: High, more than 66 percent Battery Life: 100% Battery Left: Unknown Battery Full: Unknown
封堵关闭交流10分钟后:
Kernel32.SYSTEM_POWER_STATUS batteryStatus = new Kernel32.SYSTEM_POWER_STATUS();
Kernel32.INSTANCE.GetSystemPowerStatus(batteryStatus);
System.out.println(batteryStatus); // Shows result of toString() method.
这版画成功地在我的Latitude E5500以下
ACLineStatus: Offline Battery Flag: High, more than 66 percent Battery Life: 82% Battery Left: 2954 seconds Battery Full: Unknown
(不,不坏的电池,我只是编译一部电影,并不断通过WiFi传输;))
'填充结构'是显示这一切的主要方法? – 2013-01-15 15:44:39
@LittleChild:不,这是下面的代码块“以下是您可以使用它的方式”。只需将这些行复制到你的'main()'中。你不需要编辑'Kernel32'接口/类(当然,如果需要的话,可以期待这个包,但这只不过是明显的)。 – BalusC 2013-01-15 15:45:57
示例getBatteryFlagString()方法可能有点误导,因为引用的文档指出BatteryFlag“可以包含一个或多个以下标志。”列出了1,2,4,8,128和255。更可靠的方法可能是如果标志不是255,则为每个值使用“按位与”。虽然,“收费”值(8)可能是您在1,2或4时唯一能看到的值。 – 2014-03-28 21:40:39
- 1. Android - 确定剩余的电池寿命量
- 2. 如何访问电池的剩余时间在android系统
- 3. 电池的使用寿命
- 4. Android registerListener和电池寿命
- 5. Windows如何计算电池的剩余时间?
- 6. 计算iOS中的电池寿命
- 7. 计算电池剩余时间直到电池放电?
- 8. 如何在Android手机中节省电池寿命?
- 9. 如何通过android编程检测电池剩余电量?
- 10. 如何在Android中以几小时的时间获取电池剩余价值?
- 11. GPS位置记录电池寿命
- 12. 预测电池寿命的算法
- 13. 的Android FusedLocationProvider和电池寿命
- 14. 如何获得剩余时间?
- 15. 在电池寿命方面如何实现屏幕旋转?
- 16. 从Android手机获取剩余电池时间
- 17. 在iPhone电池中寻找剩余容量
- 18. Android - 传感器读数如何影响电池使用寿命
- 19. 在Android和设备中测距iBeacon电池寿命
- 20. 在更新obj c中的位置时节省电池寿命?
- 21. 如何使用Authorize.Net获得剩余交易退款余额?
- 22. C++:如何获得余额(在银行系统)
- 23. 确定您当前在iOS中充电的电池寿命/电量有多少
- 24. 如何获得进度栏在PHP中的Windows系统命令apache
- 25. 用VB.NET检查我的笔记本电脑电池寿命
- 26. micrium文件系统获取剩余空间
- 27. 如何使用jQuery获取剩余的剩余空间
- 28. 用Labview排出3V纽扣电池来测试电池的使用寿命?
- 29. 如何在x64系统中获得Windows控制面板?
- 30. 了解哪些应用程序正在使用电池寿命
你的意思是电池电量?另外,什么版本的Windows? – 2010-08-08 14:49:17
这不应该是OS独立的? – thelost 2010-08-08 14:51:42