バッテリーが限界レベルに達しているかどうかを確認しています。
いずれかの方向でバッテリーが低バッテリーしきい値を超えると、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);
}
}
};
システム変数のコンパイル エラーが発生します。代替手段はありますか?これは簡単なことだと思われます。システムの動作を一致させたいだけで、空想は何もありません。