我需要在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