2012-01-24 35 views
0

我在閱讀大量有關此主題的衝突信息,因此要問自己一些具體的代碼示例。只有當手機處於睡眠狀態時,我的Android應用程序在嘗試從後臺服務發出HTTP請求時,出現「網絡不可用」錯誤。只有當我收到這些錯誤時,手機纔會使用移動網絡(建築物內沒有Wi-Fi)。Android睡覺時的互聯網連接問題

我使用此代碼來安排我的服務:

static private void SchedulePoll(Context context,int minsFromNow) 
{ 
    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.MINUTE, minsFromNow); 
    Intent intent = new Intent(context, PSDroidBroadcastReceiver.class); 

    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 
} 

我的服務取得PARTIAL_WAKE_LOCK,然後調用:

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

在這一點上,我得到一個網絡不可用例外,只當手機處於睡眠模式時。

在睡眠模式下是否有這樣的問題是正常的,還是應該能夠從我的服務中建立互聯網連接?似乎很多應用程序檢查電子郵件和其他東西,所以它應該是正常的,大部分時間工作?

我查看了電話設置,並確保與背景連接相關的任何內容都已啓用。這是一個Sprint HTC,Evo我認爲。

+0

它是哪種設備/型號和移動網絡?你說「Sprint HTV Evo」,但你可以在OP中加入更多的信息。取下電池後,您可以在電池下方找到電話信息...關機。此外,您可以使用系統信息應用程序來顯示此和OS/Android版本信息。而且,是的,就像你在下面的評論中所說的那樣......做調試是唯一的出路。也有這樣的應用程序,所以你不必經過這麼多麻煩得到這些信息(在市場上搜索_logcat_)。使用該信息編輯原始帖子,您將獲得更多幫助。 – TryTryAgain

+0

非常感謝,logcat非常棒,正是我未來調試所需要的。 – eselk

回答

1

原來這是所謂的「果汁後衛」在手機上的應用程序。我想這是爲了節省電池壽命,只要我們禁用它,我的應用程序就可以工作。 GMai也沒有啓用它,所以我覺得非常安全,除了讓錯誤消息更直觀外,我沒有太多的工作可以更好地設計我的應用程序。

-1

即使有Partial_Wake_Lock你需要的東西,如:

Settings.System.putInt(getContentResolver(), 
    Settings.System.WIFI_SLEEP_POLICY, 
    Settings.System.WIFI_SLEEP_POLICY_NEVER); 

來自How do I keep Wifi from disconnecting when phone is asleep?

+0

那個線程沒有說明這個或沒有,所以......這是否也適用於移動網絡?這似乎是特定於Wi-Fi,在我的情況下,手機正在使用移動(G3)網絡。 – eselk

+0

其實只是發現這確實說是wi-fi只:http://developer.android.com/reference/android/provider/Settings.System.html#WIFI_SLEEP_POLICY – eselk

+0

哦,是的,這是唯一的WiFi,對不起。你有清單中的適當許可嗎? '<使用權限android:name =「android.permission.WAKE_LOCK」/>'我也指出你這個:http://stackoverflow.com/questions/2039555/how-to-get-an-android-如果你還沒有看到它,那麼你就可以開始工作了。 – TryTryAgain