3

私はアンドロイド開発を始めたばかりで、バッテリーの状態に関する詳細を表示するアプリケーションを作成しました。ここで、すべてをウィジェットに入れたいと思いました - そしてここに質問があります: ACTION_BATTERY_CHANGED インテントをリッスンするために、バックグラウンドで更新サービスが本当に必要ですか? 私が最初に考えたのは、AndroidManifest.xml 内のウィジェットの intet-filter タグに 1 行だけ挿入することでしたが、明らかにそれほど単純ではありません。UpdateService が正しい方法である場合はそうしますが、適切な解決策が何であるかを確認したかっただけです

4

3 に答える 3

4

ACTION_BATTERY_CHANGED インテントをリッスンするために、バックグラウンドで更新サービスが本当に必要ですか?

BroadcastReceiverに登録されたマニフェストは使用できませんACTION_BATTERY_CHANGED。を介してアクティビティまたはサービスによってのみ登録できますregisterReceiver()

他の理由でメモリ内にサービスがない場合は、より良い方法はポーリングです。バッテリー残量を定期的にチェックするように設定しAlarmManagerます (設定可能です!)。バッテリ レベルを確認するには、最初のパラメータに( )registerReceiver()を付けACTION_BATTERY_CHANGED IntentFilterずに を呼び出します。これにより、最新の充電レベルを取得できるlast-broadcast が返されます。BroadcastReceivernullACTION_BATTERY_CHANGED Intent

于 2010-08-09T18:22:51.407 に答える
2

バッテリーの状態を定期的に、たとえば 30 分ごとにポーリングすることをお勧めします。これを行うには、単に値を指定するだけupdatePeriodMillisですAppWidgetProviderInfo

<appwidget-provider
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:updatePeriodMillis="1800000" />

onUpdate.. のメソッドをオーバーライドして、ウィジェットを更新しますAppWidgetProvider

編集: Martin が指摘したように、実際には 30 分がこの方法で更新を受信できる最短の間隔です。

于 2010-08-09T18:42:35.570 に答える
1

信じられないかもしれませんが、次のように機能します。

cont.getApplicationContext().registerReceiver(rec, filter);
于 2011-09-10T23:19:31.423 に答える