Android睡着时互联网连接问题

时间:2012-01-24 02:01:46

标签: java android service sleep

我正在阅读有关此主题的大量相互矛盾的信息,因此请问自己一些特定的代码示例。尝试从后台服务发出HTTP请求时,我的Android应用程序出现“网络不可用”错误,仅在手机处于睡眠状态时。只有当我收到这些错误时,手机才会使用移动网络(建筑物内没有Wi-Fi)。

我使用此代码来安排我的服务:

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。

2 个答案:

答案 0 :(得分:2)

原来这是一部名为“Juice Defender”的手机应用程序。我想这是为了节省电池寿命,一旦我们禁用它,我的应用程序工作。 GMai也没有启用它,所以我觉得很安全,除了使错误信息更直观之外,我没有太多可以做的设计我的应用程序。

答案 1 :(得分:-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?