2012-09-14 127 views
1

我創建了一款在所有手機中運行良好的Android應用程序。但在我的阿爾卡特手機中,手機並未進入深度睡眠模式,數據網絡出現故障,因此應用程序無法獲取數據網絡,也無法同步服務器中的數據。Android深度睡眠和喚醒鎖


我的設計...

SystemBootReceiver - >(DataSyncService)Service - >(MyBroadcastReceiver)BroadcastReceiver - >(MyDataService)Service

所以這裏在系統啓動我開始DataSyncService我在那裏設置AlarmManager(重複),並呼籲MyBroadcastRecever。致電BroadcastRecever後,我通過致電stopself()停止DataSyncService

現在MyBroadcastRecever調用MyDataService


我遇到了WakeLocks,如上所述阻止手機進入深度睡眠模式。 所以我實現它裏面MyDataServiceonCreate()方法

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

而且release()之後鎖定停止該服務之前。

我也在Android Manifest中設置了權限。

但這沒有奏效。因此,爲了快速檢查,我使用了來自市場的WAKE LOCK應用程序。

但是這也沒有喚醒電話。我再次遇到了從市場上喚醒我的ANDROID(應用程序從商店中刪除)應用程序,並安裝了它。這裏發生了一個奇蹟。

它使手機保持活着。

正如本應用程序中的說明所述,他們也使用了Wake Lock。那麼我錯過了什麼?

是否存在執行錯誤或設計問題?

+0

也許,你可以嘗試[ACQUIRE_CAUSES_WAKEUP](http://developer.android.com/reference /android/os/PowerManager.html#ACQUIRE_CAUSES_WAKEUP)國旗與SCREEN_DIM_WAKE_LOCK –

+0

你能澄清你的問題嗎?問題是,喚醒設備後應用程序運行時,網絡請求會失敗? – satur9nine

+0

你解決了你的問題嗎? –

回答

3

你在你的服務有鎖從不運行 - 使您服務永遠不會運行

嗯 - 你必須使用一個WakefulIntentService - 讓你的MyDataService延長WakefulIntentService並在接收器的呼叫WakefulIntentService.doWakefulWork(context, MyDataService.class)

或實施一個由你的服務和接收者共享的靜態鎖 - 這將是棘手的。

如果使用Wi-Fi,你也應該需要使用WifiLock - 你清醒的意圖服務 - 可以變得棘手

+0

我認爲提問者表示他們的服務確實運行但存在網絡錯誤。 – satur9nine

+0

@ satur9nine:「但在我的阿爾卡特手機中,它並不像手機進入深度睡眠模式......」 - 請回復 –

+0

Mr_and_Mrs_D:「但是在我的阿爾卡特手機中,它並沒有像手機進入深度睡眠模式和數據網絡下降,所以應用程序不會獲得數據網絡,也不會同步來自服務器的數據。「我看到問題是「應用程序沒有獲得數據網絡」 – satur9nine