2010-08-09 144 views
3

我剛剛開始使用android開發並編寫了一個應用程序來顯示有關電池狀態的詳細信息。 現在我想把整個東西放到一個小部件 - 這裏是問題: 我真的需要在後臺更新服務來偵聽ACTION_BATTERY_CHANGED意圖嗎?我的第一個想法是在AndroidManifest.xml中將一行 行插入到widget的intet-filter標籤中 - 但顯然並不那麼簡單。 如果UpdateService是我會做正確的方式,使 - 但我只是想妥善解決是知道什麼在條件下更新android小部件

回答

4

我真的需要在 後臺更新服務來偵聽 ACTION_BATTERY_CHANGED意圖?

對於ACTION_BATTERY_CHANGED,您不能使用清單註冊BroadcastReceiver。它只能通過registerReceiver()的活動或服務註冊。

如果因爲其他原因沒有在內存中存儲服務,更好的方法是輪詢。設置一個AlarmManager以便經常檢查電池電量(請配置好!)。要檢查電池電量,請致電registerReceiver()以獲取ACTION_BATTERY_CHANGEDIntentFilter而不需要BroadcastReceiver(第一個參數爲null)。這將返回最後廣播ACTION_BATTERY_CHANGEDIntent,您可以從中獲得最新的收費級別。

+0

這聽起來像什麼,我一直在尋找 - 感謝很多 – DonGru 2010-08-10 10:05:11

+1

什麼問題清單是什麼?爲什麼它不起作用? – 2011-05-26 22:24:25

2

我建議你定期輪詢電池狀態,例如,每30分鐘一次。要做到這一點,你可以簡單地在你AppWidgetProviderInfo

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

指定updatePeriodMillis值..和通過重寫你的AppWidgetProvideronUpdate方法更新你的widget。

編輯:正如Martin指出的那樣,30分鐘實際上是您可以通過這種方式接收更新的最短時間間隔。

+0

感謝您的支持 - 但是這會限制在至少30分鐘內,因爲這是updatePeriodMillis的最小值,不是嗎? – DonGru 2010-08-10 10:01:50

+0

你是對的!這很有趣,因爲這個限制並不總是存在(http://android.git.kernel.org/?p=platform/frameworks/base.git;a=commit;h=851da848e97d9a1ec23a89ff0e200c301f32d690) – 2010-08-10 15:01:43

+0

我重新介紹了它的介紹因爲程序員使用它來進行頻繁的更新(就像時鐘部件的每一秒鐘一樣) - 這對電池壽命來說可能不是一件好事 – DonGru 2010-08-11 08:01:12

1

信不信由你,下面的工作:

cont.getApplicationContext().registerReceiver(rec, filter); 
+0

簡直不敢相信......但它起作用!有什麼收穫? – KalEl 2012-01-04 17:09:58