2012-04-25 5 views
5

実行中のアプリケーションの一覧とそれぞれのバッテリの使用量を取得しようとしています。私は長い間googleを持っていたが、解決策はなかった。しかし、PowerProfile、PowerUsageSummary内部クラスについては、いくつかの参考文献があります。BatteryStatsImplの内部クラスを使ってAndroidのリフレクションを使用する

私はReflectionテクニックでそれらを使用しましたが、探していたものが見つかりませんでした。 PowerUsageSummaryは、デバイス設定 - >アプリケーション - >バッテリ使用(これはSamsundデバイスでの表示方法です)に移動して表示されるのと同じ詳細を表示します。

私はPowerProfileクラスを使っていましたが、WIFI、AUDIO、VIDEO、GPS、BLUETOOTHなどの電流のmAしか得られませんでした(mA値はあまり変化しません。別のリファレンスはBatteryStatsImplクラスでした。私はこのクラスをテストしましたが、値は常に0です。それでも私は、実行中のアプリケーションの一覧とそれぞれのバッテリの使用量を探しています。どんな助けもありがとうございます。

おかげで、

は、ここで私はBatteryStatsImplクラスにしようとしたサンプル・コードです。

 String BATTERY_PROFILE_CLASS = "com.android.internal.os.BatteryStatsImpl"; 
     Object mBatteryProfile = Class.forName(BATTERY_PROFILE_CLASS).getConstructor().newInstance(); 
     Method batteryMeth = Class.forName(BATTERY_PROFILE_CLASS).getMethod("getBatteryUptime", long.class); 
     Object arglist1[] = new Object[1]; 
     arglist1[0] = System.currentTimeMillis(); 
     // This is to calculate the batteryUpTime since the current time. 
     Long batteryUptime = (Long) batteryMeth.invoke(mBatteryProfile, arglist1); 

     Method dischargeMeth = Class.forName(BATTERY_PROFILE_CLASS).getMethod("getDischargeStartLevel"); 
     // This is to calculate the dischargeTime of the device battery 
     Integer dischargeTime = (Integer) dischargeMeth.invoke(mBatteryProfile); 
+1

こんにちは、あなたが探していたものを見つけましたか?あなたがした場合、結果を投稿してもらえますか? – Drimmka

答えて

7

最初にあなたができることに注意してください

は、たぶん、あなたがそこから現在の統計情報を取得することができます(たとえば、画面がオンになると、それらのnote*()方法は、システムによって呼び出されます)システムイメージにインストールされているため、BATTERY_STATS権限を保持することができない限り、このAPIを使用しないでください。これは、システムとは別にインストールされた3番目のアプリケーションには利用できません。

これを使用するには、BatteryStatsImplを直接インスタンス化しないでください。 BatteryStatsServiceによって収集されている現在の統計情報からそのインスタンスを要求します。特にhttps://code.google.com/p/android-source-browsing/source/browse/src/com/android/settings/fuelgauge/PowerUsageSummary.java?repo=platform--packages--apps--settings

:あなたはこれを行う方法の設定アプリのソースコードを探すことができます

import android.os.BatteryStats; 

import com.android.internal.app.IBatteryStats; 
import com.android.internal.os.BatteryStatsImpl; 

IBatteryStats mBatteryInfo; 
UserManager mUm; 
BatteryStatsImpl mStats; 

mBatteryInfo = IBatteryStats.Stub.asInterface(
     ServiceManager.getService("batteryinfo")); 

private void load() { 
    try { 
     byte[] data = mBatteryInfo.getStatistics(); 
     Parcel parcel = Parcel.obtain(); 
     parcel.unmarshall(data, 0, data.length); 
     parcel.setDataPosition(0); 
     mStats = com.android.internal.os.BatteryStatsImpl.CREATOR 
       .createFromParcel(parcel); 
     mStats.distributeWorkLocked(BatteryStats.STATS_SINCE_CHARGED); 
    } catch (RemoteException e) { 
     Log.e(TAG, "RemoteException:", e); 
    } 
} 
+0

UserManager mUm;このスニペットには必要ありません –

0

BatteryStatsServiceは統計情報を保持します。そこにそれを行うために使用される方法BatteryStatsImplで見て

+0

しかし、このクラスのコンストラクタは次のとおりです。どのようにしてこのクラスのインスタンスを実現できますか。ここにファイル名は何ですか?任意のアイデア... BatteryStatsService(文字列ファイル名){ mStats = new BatteryStatsImpl(filename); } – Vansi

関連する問題