Android のバッテリー レベルが 1% 変化しても監視したい。次の 2 つの条件を満たす必要があります。
1-効率のために、ポーリングまたは定期的にバッテリーレベルをチェックしたくありません(アラームマネージャー、ハンドラー、またはポーリングにつながるものは使用しません)
2-一方、アプリケーションがフォアグラウンドにない場合やアプリケーションが強制終了された場合でも、バッテリー レベルの変化を受け取る必要があります。
現在、私はこのコードを使用しています:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
context.registerReceiver(new MyBatteryReceiver(), ifilter);
コンテキスト (または私のアクティビティ) が有効になるまで、つまり MyBatteryReceiver がバッテリ レベルの変化を受け取るまで、うまく機能します。
他の人は、registerReceiver で null を使用することを提案しています。
context.registerReceiver(null, ifilter);
この解決策は、バッテリー レベルを定期的にチェックする必要があることを意味します。
私はこれを含む多くの投稿をチェックしました:
マニフェストを使用して Android からバッテリーの統計情報にアクセスしたり、バッテリー レベルを監視したりします
しかし、誰もこの質問に答えませんでした:ポーリングせずにアンドロイドのバッテリーレベルを監視する方法は?もちろん、レベルが低すぎたり高すぎたりする場合は、次のブロードキャストを使用できます。
<action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
<action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
残念ながら、バッテリー レベルの変化に同様のブロードキャストを使用することはできません。
<action android:name="android.intent.action.BATTERY_CHANGED" />