2015-06-09 16 views
8

Tôi đang cố gắng lấy số liệu thống kê pin trong ứng dụng của mình cho một số điểm chuẩn. PinManager.BATTERY_PROPERTY_CHARGE_COUNTER tuyệt vời cho phép tôi truy vấn các amps vi mô của thiết bị tuyệt vời. Tuy nhiên, điều này chỉ được giới thiệu trong API 21 nên số lượng thiết bị này có thể đạt đến khá hạn chế. Có cách nào tương thích để làm điều gì đó tương tự trong các phiên bản API thấp hơn (xuống đến 4.0) không? Tôi biết BatteryManager.EXTRA_LEVEL sẽ cho tôi tỷ lệ phần trăm nhưng điều đó thực sự không có chi tiết.Các tùy chọn thay thế pin AndroidManager

+0

Tôi không nghĩ có. Từ những gì tôi biết sớm, API Android rất cẩu thả trong lĩnh vực này. – StoneBird

+1

@StoneBird bạn có quen thuộc với API không? Trên một số thiết bị API 22 BATTERY_PROPERTY_CHARGE_COUNTER cấp cho tôi -9223372036854775808, dài là LONG.MIN_VALUE. Đó chắc chắn là lạ. Các thiết bị khác cho tôi kết quả thực tế –

+0

Bạn cần thông tin gì về pin? – TDG

Trả lời

11

Theo như tôi biết, bạn không thể làm điều đó với API công khai cũ hơn. Tôi đã làm việc trên một ứng dụng cấp hệ thống hiển thị số liệu thống kê mức sử dụng pin cho người dùng. Tôi dựa trên mã của tôi từ ứng dụng Cài đặt Android và người dùng của tôi có thể cần quyền truy cập root hoặc ứng dụng phải được ký bằng khóa nền tảng. Bạn có thể xem các lớp học PowerUsageDetail, BatteryInfoPowerUsageSummary. Nếu bạn may mắn, bạn có thể truy cập vào các API ẩn với sự phản ánh JAVA. Nếu không, bạn cần có khóa nền hoặc gốc. Các API nội bộ thay đổi rất thường xuyên nên nó khá đau đớn khi sử dụng.

Ngoài ra còn có một vài công cụ mà bạn có thể muốn kiểm tra:

  • adb dumpsys vỏ batterystats
  • dumpsys adb shell batteryinfo
  • battery historian
  • adb shell cáo lỗi

Dumpsys source code

Chúc bạn may mắn!

Edit:

My old project might be useful for you.

+0

Tôi có thể truy cập root trên các thiết bị thử nghiệm của mình vì vậy nếu đó là khả năng tuyệt vời. Tôi chỉ quan tâm đến việc tiêu thụ điện năng của các thiết bị thử nghiệm của tôi, không phải cho người dùng chung. –

+0

https://github.com/prt2121/BatUsage có thể hữu ích. Tôi không nhớ những gì tôi đã làm sau đó mặc dù ... – pt2121

+0

Tôi sẽ đánh dấu đây là câu trả lời vì nó có rất nhiều thông tin hữu ích nhưng không phải tất cả các thiết bị đều ghi lại tất cả các thông tin cần thiết để theo dõi việc sử dụng năng lượng thực tế. nó không xuất hiện có thể bao gồm mọi thiết bị. Ít nhất, không phải không có nhiều nỗ lực. –

0

Như mỗi việc đào tạo giám sát pin http://developer.android.com/training/monitoring-device-state/battery-monitoring.html, bạn có thể nhận được thông tin pin hiện tại bằng cách sử dụng:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
Intent batteryStatus = context.registerReceiver(null, ifilter); 
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
float batteryPct = level/(float)scale; 

Lưu ý rằng bạn cần phải tiếp tục kêu gọi này lặp đi lặp lại để có được mức pin cập nhật. Khi thức dậy ứng dụng của bạn và kiểm tra điều này sẽ tự lấy pin, chúng đề xuất:

+4

Nếu bạn đọc bài đăng của tôi, bạn sẽ thấy rằng các phương pháp BatteryManager tương thích với các API dưới cấp 21 không cung cấp mức độ chi tiết mà tôi cần. –

+0

Tôi chỉnh sửa câu trả lời ở trên mã sẽ làm việc với API cấp 21 và cung cấp cho bạn số liệu thống kê pin. Hãy xem xét việc theo dõi pin chủ đề trong nhà phát triển Android trước khi triển khai câu trả lời như tôi đã đề cập đến liên kết tới trang web của nhà phát triển trong câu trả lời đã chỉnh sửa của tôi –

+4

Một lần nữa, nếu bạn đọc bài đăng của tôi, bạn sẽ thấy tôi biết rõ về các API đó. Tôi đang tìm kiếm các giải pháp thay thế vì chúng không làm những gì tôi cần. –

4

Đầu năm nay, tôi đã gặp một bài viết thú vị về phương pháp xác định vị trí điện thoại thông minh chỉ dựa trên mức tiêu thụ điện năng của thiết bị, được gọi là PowerSpy.

Trong khi tôi chưa bao giờ thực hiện/thử nghiệm phương pháp này bản thân mình, các tác giả cho rằng:

Trên Android đọc tổng hợp đồng hồ điện của điện thoại được thực hiện bằng cách liên tục đọc hai tập tin sau đây:
/sys/class/power_supply/battery/voltage_now
/sys/class/power_supply/battery/current_now.

Họ cũng xác nhận đã thử nghiệm phương pháp trên Nexus 4, Nexus 5 và HTC. Mặc dù điều này không cụ thể về phiên bản chính xác của thiết bị Android được trang bị, Nexus 4 được cho là đi kèm với API cấp 17 và Nexus 5 với API cấp 19, nhưng cả hai điện thoại dường như đều phải được nâng cấp hệ điều hành.

Tuy nhiên, điều này có vẻ là một phương pháp hoàn toàn khác khi so sánh với các phương pháp được đề cập bởi các áp phích khác, vì vậy có lẽ đáng nói đến.Thật không may, nó có vẻ là một cách tiếp cận mức độ thấp, vì vậy rất nhiều công việc có thể được yêu cầu để có được những gì bạn cần, kể từ sức mạnh, như trong Vật lý, không thực sự có nghĩa là tiêu thụ pin. Nhưng có lẽ bạn cần nó theo cách này.

Cuối cùng, bài viết đề cập rằng quyền truy cập vào hai tệp yêu cầu không có quyền đặc biệt (loại động lực nào cho nghiên cứu mà họ đã làm ngay từ đầu).

EDIT

suy nghĩ Thứ hai, nếu bạn lô P=U*I (nhận U và tôi như đã đề cập ở trên) và tích hợp theo thời gian (đó sẽ là một khoản tiền trong trường hợp rời rạc này), bạn chỉ có thể nhận được một xấp xỉ rất tốt mức tiêu thụ pin. Có lẽ bạn cũng yếu tố trong một bộ lọc Kalman (để làm giảm tiếng ồn trên U và tôi, hãy nhớ rằng thuật toán của bạn không phải là người tiêu dùng duy nhất) và bạn có thể chỉ nhận được những gì bạn muốn.

+0

Tôi đã thực sự đọc bản thân giấy khi nó xuất hiện. Thật thú vị, gọi hàm 'Runtime.getRuntime(). Exec (" cat/sys/class/power_supply/pin/voltage_now ")' không hoạt động trên một số thiết bị và cố gắng mở chúng dưới dạng tệp không hoạt động ngay cả khi nếu tôi chạy 'adb shell cat/sys/class/power_supply/pin/voltage_now' nó hoạt động. –

+0

Dường như các thiết bị này không giám sát hiện tại để phương pháp tiếp cận không thực sự hoạt động trên chúng. –

Các vấn đề liên quan