web-dev-qa-db-ja.com

Android SDKを使用して1回だけバッテリーレベルを取得

Webで検索したが、質問への回答が見つかりませんでした。私の問題は、バッテリーレベル情報を一度だけ取得することです。関数getBatteryLevel()を呼び出します。 BroadcastReceiverを使用して実装されたソリューションのみがありますが、私が知っているように、バッテリーレベルの変更イベントで毎回呼び出されます。一度だけ情報を取得する方法を教えてください。

31

Intent.ACTION_BATTERY_CHANGED ブロードキャストは、「スティッキーブロードキャスト」として知られています。これはスティッキーなので、registerReceiverを呼び出したときにバッテリーレベルoneのみを取得するヌルレシーバーでブロードキャストに登録できます。

更新を受信せずにバッテリーレベルを取得する関数は、次のようになります。

public float getBatteryLevel() {
    Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

    // Error checking that probably isn't needed but I added just in case.
    if(level == -1 || scale == -1) {
        return 50.0f;
    }

    return ((float)level / (float)scale) * 100.0f; 
}

このスティッキーブロードキャストからより多くのデータを引き出すことができます。返されたbatteryIntentを使用すると、 BatteryManager クラスで概説されている他の追加機能にアクセスできます。

98
Michael Celey