2012-10-12 39 views
1

我有是在課堂上MLocation聲明爲Android部件位置監聽器,保持位置監聽器活着的時候,手機睡覺

私有靜態MyLocationListener LocationListener的;

小部件啓動一個服務,然後創建MLocation類。 MLocation類在創建時創建並註冊位置監聽器。

一切正常,直到電話睡覺。當電話睡眠(睡眠一段時間後),Android會殺死服務以及由它創建的所有類(MLocation也是如此)。在手機解鎖時,Android會重新創建服務,然後創建MLocation類等。在手機休眠期間,位置不再監聽更改(因爲它被終止)。有沒有辦法讓位置監聽器保持活躍狀態​​,即使手機在睡覺?

+0

您需要通過服務運行'LocationListener'。查看[本教程](http://androidgps.blogspot.com/2008/09/simple-android-tracklogging-service.html) – jnthnjns

回答

0

不會。當手機進入睡眠狀態時,基本上沒有關閉CPU,因此沒有應用程序正在運行。如果您需要在手機處於睡眠狀態時收聽位置更改,則需要通過獲取喚醒鎖來防止其進入睡眠狀態。被警告,如果你這樣做,你會很快耗盡電池,你的用戶會卸載你的應用程序。

0

如果您想在電話睡眠時跟蹤位置,您需要一個partial wake lock。即使用戶按下電源按鈕(但屏幕仍然可以關閉),它會使電池快速放電,因爲它基本上可以讓手機保持睡眠狀態。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
wl.acquire(); 

您需要通過清單請求權限是什麼,以及這將是可見的谷歌遊戲(假定這就是你把應用程序),使高級用戶應該知道的是,影響。

現在我會說你會看到什麼地方:儘量避免使用部分喚醒鎖,因爲它會殺死電池,人們會討厭它。

OTOH,如果你的應用程序絕對需要它,這就是它的必要條件。

0

你應該只依靠你的LocationListener,你需要「重新思考」你的應用程序的所有結構。可能註冊一個LocationChangedReceiver將是一個很好的選擇,以及其他實際位置的來源。

詳情請參閱@Reto Meier撰寫的偉大文章:A Deep Dive Into Location on Android