2013-04-09 33 views
15

Tôi đang viết một ứng dụng để đánh giá tính khả thi của một mạng P2P Bluetooth trên Android.Tôi làm cách nào để tìm hiểu mức pin mà ứng dụng Android của mình tiêu thụ trên thiết bị của người dùng?

Tôi nhận thấy rằng trên Galaxy Nexus, nó sử dụng rất ít pin, trong khi trên Nexus S, nó tiêu hao pin rất nhanh. Điều này là trực tiếp gây ra bởi tải CPU cao do Bluetooth.

Bây giờ, tôi muốn thu thập thông tin về mức tiêu hao pin mà ứng dụng của tôi gây ra trên thiết bị được cài đặt. Chỉ cần ghi lại thời gian so với mức pin là vô ích vì tôi không biết khi nào thiết bị đang được sử dụng và thậm chí nếu tôi đăng nhập, tôi sẽ không biết liệu người dùng có đang chơi trò chơi 3D trong khi Torrenting qua WiFi hoặc đọc sách điện tử trên làm mờ màn hình.

Để làm cho vấn đề tồi tệ hơn, không phải tất cả việc sử dụng pin do ứng dụng của tôi gây ra đều nằm trong màn hình pin - một số được liệt kê là "Bluetooth", ví dụ (một lần nữa, phụ thuộc vào thiết bị).

Có cách nào dễ dàng, bảo quản riêng tư để nhận thông tin hữu ích trên các thiết bị không bắt nguồn từ không? Các thiết bị không nằm trong tầm kiểm soát của tôi. Tôi không thể đơn giản nhìn vào thực đơn, tôi không thể sử dụng ADB.

+0

Bạn có cần thông tin thiết bị này từ xa không? Khi bạn nói 'thời gian khai thác so với mức pin 'là bạn đang nói về mức pin của toàn bộ điện thoại hoặc pin được ứng dụng của bạn tiêu thụ? –

+0

@DeepakBala: Có, thông tin cần được tải lên máy chủ thu thập dữ liệu. Ghi nhật ký pin được ứng dụng của tôi tiêu thụ là những gì tôi muốn làm, nhưng tôi không biết bất kỳ API nào cho phép tôi làm như vậy. Ghi lại mức pin của điện thoại thật dễ dàng, nhưng (như tôi đã chỉ ra) vô ích. –

Trả lời

1

API Android hiện không hỗ trợ tính năng này. Chỉ available documentation là mô tả cách sử dụng các chương trình phát sóng của BatteryManager, chỉ cung cấp mức pin tổng thể và không có chi tiết mỗi ứng dụng.

Tôi cho rằng ngay cả khi có những cách không có giấy tờ để mô phỏng những gì trình quản lý pin Cài đặt hệ thống hiển thị, chúng sẽ yêu cầu root.

1

AFAIK không có cách nào để thực hiện việc này. Việc gần nhất bạn có thể thực hiện việc này là kết nối thiết bị với một công cụ giám sát như little eye labs để rút pin được ứng dụng của bạn sử dụng theo thời gian trên biểu đồ. Nó cũng hỗ trợ đánh dấu các sự kiện quan trọng trong vòng đời của ứng dụng như bật WIFI/bluetooth, v.v.

Không có hỗ trợ thực hiện điều này từ xa, nhưng bạn có thể lấy dữ liệu trên thiết bị thử nghiệm của riêng bạn.

+0

Không chấp nhận thêm đăng ký sau khi mua fb. Bạn có biết bất kỳ công cụ nào khác như thế này không? Bạn đã sử dụng ít phòng thí nghiệm mắt? –

+0

Tôi đã sử dụng ít phòng thí nghiệm mắt cho một ứng dụng mà tôi đã viết một thời gian dài trở lại. Tôi đã không tìm thấy sự cần thiết cho một cái gì đó tương tự từ bao giờ. Android lollipop tự hào xây dựng một [công cụ mới để phát hiện mức sử dụng pin] (http://developer.android.com/about/versions/lollipop.html#Battery). Tôi đã không có cơ hội để sử dụng nó mặc dù. –

+0

Tuyệt. Cảm ơn! Tôi có một ứng dụng sử dụng rất nhiều cảm biến nên tôi đang tìm cách tìm ra phân phối mức sử dụng pin theo giá trị thực, không chỉ bằng%. Tôi sẽ thử sử dụng pin. Chúc mừng! –

1

Cách tiếp cận này khá thô, nhưng có thể hữu ích. Bạn có thể sử dụng các chương trình phát sóng BatteryManager hiện tại để theo dõi các thay đổi đối với mức pin tổng thể trong khi ứng dụng của bạn đang hoạt động.

Biết khi nào ứng dụng của bạn đang hoạt động là một vấn đề riêng biệt. Nếu ứng dụng của bạn bao gồm toàn bộ Hoạt động thì bạn có thể nhận được kết quả tốt bằng cách bắt đầu theo dõi bất cứ khi nào có bất kỳ phương thức nào trong số hoạt động của bạn được gọi là "onResume()" và ngừng theo dõi trong onPause(). Nếu bạn có thể có tất cả các Hoạt động của bạn xuất phát từ một lớp Hoạt động cơ bản, thì điều này khá dễ dàng. Xem How to detect when an Android app goes to the background and come back to the foreground để biết các đề xuất về cách theo dõi điều này.

Nếu ứng dụng của bạn phức tạp hơn và thông minh xảy ra trong thành phần chạy lâu hơn như Dịch vụ thì sẽ khó hơn nhiều.

Điều này là thô, nhưng ít nhất nó sẽ giúp bạn phân biệt "chơi trò chơi 3D" từ "sử dụng ứng dụng của tôi".

+0

Thật không may, nhiều hay ít toàn bộ ứng dụng là một dịch vụ nền. –

+0

Vì vậy, bạn hãy sử dụng dịch vụ nền chính theo cách thức được đề xuất cho các hoạt động. Bạn phải biết sau đó bạn có Bluetooth hoạt động surly? Để thu thập dữ liệu, bạn có thể muốn xem một trong các gói phân tích. Tôi có một cái gì đó tương tự bằng cách sử dụng Flurry và các sự kiện của riêng tôi như là phụ trợ. – Ifor

+0

@Ifor: Việc sử dụng dịch vụ nền sẽ không giúp tôi phân biệt giữa "pin cạn kiệt vì tôi sử dụng bluetooth" và "cạn kiệt pin vì người dùng chơi trò chơi 3D ở nền trước trong khi tôi sử dụng bluetooth". –

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