非常にトリッキーな質問です。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();
問題の解決に役立つことを願っています。