4

やなどBATTERY_PROPERTY_CAPACITY、Android デバイスのバッテリーからほとんどの統計情報にアクセスしようとすると問題が発生します。これらのプロパティはすべてここに明確に文書化されています: http://developer.android.com/reference/android/os/BatteryManager.htmlBATTERY_PROPERTY_CHARGE_COUNTERBATTERY_PROPERTY_CURRENT_AVERAGE

マニフェストで宣言された次の権限があります。

<uses-permission android:name="android.permission.BATTERY_STATS" />

null 以外の BatteryManager インスタンスがあります。

mBatteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE);

そして、これらの統計を取得しようとするたびに:

double remainingCapacity = mBatteryManager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CAPACITY);
double batteryCapacityMicroAh = mBatteryManager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
double averageCurrentMicroA = mBatteryManager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);

結果はすべて 0 です。常に、必ず 0 です。これをエミュレーターや実際のデバイスで試してみましたが、考えたことはすべて結果を変更できませんでした。

助けていただければ幸いです。最終的に、私がやろうとしているのは、デバイスが完全に充電されるまでの残り時間を計算することです (充電中)。前もって感謝します。

4

3 に答える 3

4

これがあなたの助けになるかどうかはわかりませんが、バッテリー残量ゲージ(https://source.android.com/devices/tech/power/device.html)を備えた電話のみが、あなたの値の一部を報告することができます探している。私の知る限り、Nexus 6、9、および 10 のみが、探している 3 つの値すべてを提供し、Nexus 5 のみが提供されBATTERY_PROPERTY_CAPACITYます。

于 2015-10-29T20:35:36.680 に答える
0

Action_Battery_Changed ブロードキャストに登録する必要があります。これは、このイベントが発生するたびに呼び出されます。これはスティッキー Intent であるため、一度登録するとブロードキャストを続けます。以下のメソッドは、現在のバッテリーレベルを取得します。

private void getBatteryPercentage() {
    BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            context.unregisterReceiver(this);
            int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            int level = -1;
            if (currentLevel >= 0 && scale > 0) {
                level = (currentLevel * 100) / scale;
            }
            Toast.makeText(MainActivity.this, level + "%", Toast.LENGTH_LONG).show();
        }
    };
    IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}
于 2015-08-28T23:24:48.110 に答える