4

バッテリーが少なくなると、Android は ACTION_BATTERY_LOW インテントを送信します。その後、再び問題がなければ、ACTION_BATTERY_OKAY を送信します。

残念ながら、バッテリーの残量が少ないときにアプリケーションを起動すると、インテントが送信されません。粘着性がないので、バッテリーアラートが現在存在しているかどうかを検出できません。ACTION_BATTERY_CHANGED粘着性がありますが、システムが低バッテリー警告を宣言したかどうかではなく、現在のバッテリー充電状態を通知するだけです。

特定の瞬間にバッテリーが低下しているかどうかを検出する方法はありますか?

4

3 に答える 3

2

非常にトリッキーな質問です。Android Developer の関連コードに誤りがあります。

基本的に、このリンクでそれを検出する方法を学ぶことができます:

https://developer.android.com/training/monitoring-device-state/battery-monitoring.html

メソッド OnReceive(Context context, Intent intent){} を使用して、ブロードキャスト レシーバーが充電中であるかどうか、バッテリー残量が少ないかどうかを検出できます。{}

ただし、このリンクには、重要な変更を監視するための誤りがあります。[注意、アクション名は android.intent.action.ACTION_BATTERY_LOW]

[1]

しかし、Intent でどのように記述されているか見てみましょう。

ACTION_BATTERY_LOW

API レベル 1 で追加文字列 ACTION_BATTERY_LOW ブロードキャスト アクション: デバイスのバッテリー残量が少ないことを示します。このブロードキャストは、「低バッテリー警告」システム ダイアログに対応します。

これは、システムによってのみ送信できる保護されたインテントです。

定数値: "android.intent.action.BATTERY_LOW" Android Developers Intent でこれを見つけることができます。

つまり、ここでミスが発生します。action.ACTION_BATTERY_LOW ではなく action.BATTERY_LOW である必要があります。したがって、AndroidManifest のコードは次のようになります。

<receiver android:name=".receiver.BatteryLevelReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BATTERY_LOW"/>

            <!--instead of android.intent.action.ACTION_BATTERY_LOW-->
        </intent-filter>
    </receiver>

また、レシーバーが正しいことを確認してください。

public class BatteryLevelReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        Log.e("", "BATTERY LOW!!");

}

}

ラップトップでデバッグまたはログを取得するのは難しいため、Toast を使用すると役立つ場合があります。

        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        //Toast.makeText(Context context, String str, Integer integer).show();

問題の解決に役立つことを願っています。

于 2016-07-06T22:12:51.243 に答える
1

通常、低バッテリー警告は 15% で表示されるため、バッテリー レベルが 15% 以下かどうかを確認できます。

于 2012-06-19T15:32:55.750 に答える
1

スティッキー インテントには、まだいくつかの情報が含まれています。あなたはまだバッテリーレベルを得ることができるはずです

int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

http://developer.android.com/training/monitoring-device-state/battery-monitoring.htmlから取得

于 2012-06-19T15:38:25.577 に答える