18

Android での Bluetooth P2P ネットワークの実現可能性を評価するアプリを作成しています。

Galaxy Nexus ではバッテリーの消費量が非常に少ないのに対し、Nexus S ではバッテリーの消耗が非常に早いことに気付きました。これは、Bluetooth による高い CPU 負荷が直接の原因です。

ここで、アプリがインストールされているデバイスでアプリが引き起こすバッテリーの消耗に関する情報を収集したいと思います。デバイスがいつ使用されているかわからないため、単純に時間とバッテリーレベルを記録しても意味がありません。記録したとしても、ユーザーが 3D ゲームをプレイしているときに Wi-Fi 経由でトレントしたり、電子書籍を読んだりしているのかどうかはわかりません。薄暗い画面。

さらに悪いことに、アプリによるすべてのバッテリー使用量がバッテリー画面に表示されるわけではありません。たとえば、一部は「Bluetooth」として表示されます (デバイスによって異なります)。

ルート化されていないデバイスで有用な情報を取得するための簡単でプライバシーを保護する方法はありますか? デバイスは私の管理下にありません。私は単にメニューを見に行くことができず、ADBを使用できません。

4

3 に答える 3

1

Android API は現在これをサポートしていません。利用可能な唯一のドキュメントは、BatteryManagerのブロードキャストの使用方法を説明したものです。これは、全体的なバッテリー レベルのみを提供し、アプリケーションごとの詳細は提供しません。

システム設定のバッテリー マネージャーが示す内容をエミュレートするための文書化されていない方法があるとしても、ルート化が必要になると思います。

于 2013-04-09T11:08:34.353 に答える
1

このアプローチは非常に大雑把ですが、役立つ場合があります。アプリがアクティブな間、既存の BatteryManager ブロードキャストを使用して、全体的なバッテリー レベルの変化を追跡できます。

アプリがいつアクティブになるかを知ることは、別の問題です。アプリがすべてアクティビティで構成されている場合、アクティビティのonResume()メソッドのいずれかが呼び出されるたびに追跡を開始し、onPause(). すべてのアクティビティを単一の基本アクティビティ クラスから派生させることができれば、これは非常に簡単です。これを追跡する方法の提案については、Android アプリがバックグラウンドに移行してフォアグラウンドに戻るタイミングを検出する方法を参照してください。

アプリがより複雑で、Service のような長時間実行されるコンポーネントでスマートなことが行われる場合、それははるかに困難です。

これは大雑把ですが、少なくとも「3D ゲームのプレイ」と「アプリの使用」を区別するのに役立ちます。

于 2013-04-09T11:29:00.683 に答える