我已經實施了一項Android設備服務(START_STICKY
),它在設備啓動時啓動並在後臺運行。這項服務的功能是與SD卡交互。隨着它不斷運行,從粘性開始消耗電池。爲了解決沉重的電池消耗,我想在用戶使用設備時啓動此服務。如何在用戶開始使用android設備時啓動後臺服務?
理想情況下基於ACTION_SCREEN_ON
& ACTION_SCREEN_OFF
意圖的啓動/停止服務。
當我已經測試了這個發現,我不能註冊在清單ACTION_SCREEN_OFF
& ACTION_SCREEN_ON
,所以我在服務中創建的廣播接收機捕獲ACTION_SCREEN_OFF
& ACTION_SCREEN_ON
。
但是,由於我無法註冊清單中的意圖,因此我在ACTION_SCREEN_OFF
上停止了我的服務。如何在屏幕重新開啓時啓動它?
注意: 正如我已經提到SCREEN_ON
+ SCREEN_OFF
不能在清單文件中註冊。這是註冊像
// REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
broadcastReceiver = new TestReceiver();
registerReceiver(broadcastReceiver, filter);
所以,當服務沒有運行,然後這個意圖不會觸發。
那麼,在你的廣播接收器的SCREEN_ON + SCREEN_OFF,簡單地轉發這些通過startService的服務,同樣的動作。在服務中,你可以在onStartCommand中檢查意圖的動作,如果它是screen_on - >啓動服務,如果是screen_off,服務應該已經在運行,所以你關閉它。 – damian
正如我已經提到SCREEN_ON + SCREEN_OFF不能在清單文件中註冊。所以當服務沒有運行時它不會被調用。 – Sachin
類似的問題:http://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen-off和答案是,你必須使用長期服務(粘性)。 – aleung