Tôi cần có tuổi thọ pin còn lại trong hệ thống Windows. Tôi làm nó như thế nào?Cách lấy thời lượng pin còn lại trong hệ thống Windows?
Trả lời
Tôi cho rằng bạn đang nói về máy tính xách tay. Không có API nào tồn tại trong API chuẩn Java SE. Thông tin này chỉ có sẵn trong API nền tảng hệ điều hành. Bạn sẽ cần ít nhất JNI hoặc JNA(JavaWorld article) để có thể giao tiếp với API gốc nền tảng.
Trong Windows, bạn muốn móc trên SYSTEM_POWER_STATUS
structure. Nó cung cấp trong số những người khác các tài sản BatteryLifePercent
mà có thể được quan tâm của bạn. Tôi tìm thấy một đoạn mã dựa trên JNA hữu ích trong một chủ đề forums.sun.com cũ hiện không còn nữa. Vì vậy, tín dụng thực sự đi đến Tác giả Tên của ai không được biết đến.
Để có được nó để làm việc, đầu tiên thả jna.jar
trong classpath và sau đó sao chép các lớp sau chưa sửa đổi vào dự án của bạn:
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);
}
Đây là cách bạn có thể sử dụng nó, ví dụ trong main()
phương pháp của bạn:
Kernel32.SYSTEM_POWER_STATUS batteryStatus = new Kernel32.SYSTEM_POWER_STATUS();
Kernel32.INSTANCE.GetSystemPowerStatus(batteryStatus);
System.out.println(batteryStatus); // Shows result of toString() method.
in này thành công sau tại Latitude E5500 của tôi:
ACLineStatus: Online Battery Flag: High, more than 66 percent Battery Life: 100% Battery Left: Unknown Battery Full: Unknown
Và sau khi cắm ra khỏi AC trong 10 phút:
ACLineStatus: Offline Battery Flag: High, more than 66 percent Battery Life: 82% Battery Left: 2954 seconds Battery Full: Unknown
(không, không pin xấu, tôi chỉ đang biên soạn phim và liên tục chuyển qua wifi ngay bây giờ;))
'Điền vào cấu trúc' là phương pháp chính để hiển thị tất cả điều này? –
@LittleChild: không, đó là khối mã bên dưới "Đây là cách bạn có thể sử dụng nó". Chỉ cần copypaste những dòng đó vào 'main()' của bạn. Bạn không cần phải chỉnh sửa giao diện/lớp 'Kernel32' (mong đợi của gói nếu cần thiết, nhưng không có gì rõ ràng hơn). – BalusC
Ví dụ phương thức getBatteryFlagString() có thể gây nhầm lẫn một chút vì tài liệu tham chiếu nói rằng BatteryFlag "có thể chứa một hoặc nhiều cờ sau đây". Với 1, 2, 4, 8, 128 và 255 được liệt kê. Cách tiếp cận đáng tin cậy hơn có thể là sử dụng "bitwise AND" cho mỗi giá trị nếu cờ không phải là 255. Mặc dù vậy, giá trị "sạc" (8) có lẽ là thứ duy nhất bạn có thể xem với 1, 2 hoặc 4. –
- 1. Cách lấy Thống kê Pin trong Android khi chạy?
- 2. Cách lấy thời gian khởi động hệ thống Android
- 3. Nhận thời gian sử dụng pin còn lại từ điện thoại Android
- 4. Thời gian hệ thống Windows với mili giây chính xác
- 5. Cách lấy "thư mục tạm thời" trong Windows 7?
- 6. Lấy khoảng cách nút (bước nhảy) trong hệ thống NUMA
- 7. Khởi động lại thiết bị USB một cách có hệ thống trong Windows
- 8. Cách lấy Màu Hệ thống Android
- 9. Cách lấy ngôn ngữ hệ thống và ngôn ngữ hệ thống trong ca cao
- 10. Cách lấy thời gian hệ thống trong Java mà không cần tạo một Date mới
- 11. Lấy kích thước hệ thống RAM
- 12. Làm thế nào chúng ta có thể phát hiện khối lượng hệ thống trong Windows 8?
- 13. Thời gian còn lại của QTimer
- 14. Cách tìm dung lượng đĩa còn lại bằng Java?
- 15. Lập trình khởi động hệ thống trong c + + (windows)
- 16. Lấy khóa toàn hệ thống độc quyền trong Java
- 17. System.Timers.Timer Cách lấy thời gian còn lại cho đến khi Elapse
- 18. Cách lấy thời lượng của MP3 trong .NET?
- 19. Cuộc gọi hệ thống trên Windows
- 20. Thời gian ước tính còn lại, tôi còn thiếu gì?
- 21. thời gian Ước tính còn lại trong C++ 11
- 22. Lấy tiêu đề/mô tả Mã Lỗi Hệ thống Windows từ số hex của nó
- 23. Hệ thống SVM (máy học tập) số lượng lớn
- 24. Hệ thống giống như NCurses cho Windows
- 25. Nhận thời gian hiện tại (tính bằng mili giây) từ đồng hồ hệ thống trong Windows?
- 26. Pin Android trong SDK
- 27. Cách lấy ID MAC của hệ thống bằng C#
- 28. cách an toàn nhất để lấy Hệ thống lái
- 29. Lấy thời lượng của một GIF động?
- 30. Hệ thống tệp trong bộ nhớ cho WIndows
Ý của bạn là pin? Ngoài ra, phiên bản Windows nào? –
Đây có phải là hệ điều hành độc lập không? – thelost