2

バッテリーが限界レベルに達しているかどうかを確認しています。

いずれかの方向でバッテリーが低バッテリーしきい値を超えると、Android はアプリにインテントを送信します。ただし、これは、アプリの実行中にしきい値を超えた場合にのみ機能します (インテントはスティッキーではないため、ハングアップしません)。したがって、ユーザーがアプリを開いたときに値が低い場合は、運が悪い (または少なくとも情報が得られない) ことになります。

スティッキー インテント ACTION_BATTERY_CHANGED もあります。これには、バッテリー レベルに関する情報と、パーセンテージを計算するためのスケールがあります。これはすばらしい機能です。ただし、低バッテリーしきい値を含むシステム変数を見つけることができませんでした (デバイスによって異なるようです)。

検索を行ったところ、次のことがわかりました: When android fires ACTION_BATTERY_LOWは、システム変数 com.android.internal.R.integer.config_lowBatteryWarningLevel を使用する Android システム コードのソース リストです。ただし、この変数に自分でアクセスすることはできませんでした (保護されていると思います)。

バッテリーの割合を比較するための合理的な基準が欲しいので、バッテリーを集中的に使用する機能をいつオフにするかがわかります。それだけです。

これが私のコードです:

private BroadcastReceiver powerListener = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
    int batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
    int batteryScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);
        int batteryPercentLeft = (batteryLevel * 100) / batteryScale;

        if (batteryPercentLeft <= com.android.internal.R.integer.config_lowBatteryWarningLevel) {
            _thread.onBatteryStateReceived(DataModel.BatteryState.LOW);
        }
    }
};

システム変数のコンパイル エラーが発生します。代替手段はありますか?これは簡単なことだと思われます。システムの動作を一致させたいだけで、空想は何もありません。

4

1 に答える 1