2011-10-21 80 views
0

我已經創建了一個電池小部件,它使用服務來聽取電池更換。 但是正因爲如此,在創建widget之前,它必須等待電池狀態發生變化才能顯示數據。Android電池小部件初始化

我的問題是,是否有簡單的方法詢問電池是否一次性發生。

我可能會吠叫錯誤的樹,但我曾嘗試在AppWidgetProvider類中使用BroadcastReceiver來獲取電池的初始狀態,但無法弄清楚如何停止,以便服務可以從那裏。

有什麼想法?

乾杯

回答

2

我已經創建了一個使用服務偵聽電池更換的電池部件。

請注意,在所有的時間保持服務通常不是一個好主意。用戶不喜歡它,並會通過設置中的任務殺手或管理服務屏幕將其關閉。 Android也不喜歡它,並最終會停止它。

由於電池電量不會非常頻繁地變化,因此請考慮切換到使用AlarmManager的型號,並每隔幾分鐘檢查電池電量。

但是因爲這個原因,創建widget時必須等待電池狀態發生改變才能顯示數據。

號當您註冊ACTION_BATTERY_CHANGED,您BroadcastReceiver立即與該動作的最後發送廣播調用,因爲ACTION_BATTERY_CHANGED是一個棘手的廣播。

您可以在this sample project中看到。電池信息立即顯示在活動中 - 這是唯一可能的,因爲立即調用onReceive()方法。

我的問題是,是否有簡單的方法詢問電池是否一次性發生。

這也是可能的。請致電registerReceiver(),電話ACTION_BATTERY_CHANGED,但電話號碼爲nullBroadcastReceiver。您將爲該行動返回最後發送的廣播Intent。例如,這將是從AlarmManager事件處理它的方式。

+0

是當第一次創建它我是諱莫如深使用永久服務,但是當我看到許多最成功的電池部件的也使用了永久的服務,我的擔心得到緩解。系統會在什麼情況下將其關閉?我想像資源何時變得有限。我一直在運行這個小部件大約一週,並且它沒有失去與電池同步。謝謝,我將研究使用AlarmManager – FullySearchable