【发布时间】:2014-03-13 04:48:52
【问题描述】:
我有一项服务,它会以一定的时间间隔轮询服务器。我使用 AlarmManager 和 BroadcastReceiver 来启动服务。我的问题是,经过一段时间后,即使 Wifi 仍然启用,但由于某种原因,我的应用程序无法联系服务器。我收到“无法访问的网络”错误。
请注意,我已经获得了部分唤醒锁和 wifilock。
这是我的广播接收器代码。
public class ServiceAlarmBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
WakeLock wakeLock = null;
WifiLock wifiLock = null;
try {
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
// acquire a WakeLock to keep the CPU running
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakeLock");
if(!wakeLock.isHeld()){
wakeLock.acquire();
}
Log.i("ServiceAlarmBroadcastReceiver", "WakeLock acquired!");
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL , "MyWifiLock");
if(!wifiLock.isHeld()){
wifiLock.acquire();
}
Log.i("ServiceAlarmBroadcastReceiver", "WifiLock acquired!");
context.startService(new Intent(context, ThePollerService.class));
} finally {
// release the WakeLock to allow CPU to sleep
if (wakeLock != null) {
if (wakeLock.isHeld()) {
wakeLock.release();
Log.i("ServiceAlarmBroadcastReceiver", "WakeLock released!");
}
}
// release the WifiLock
if (wifiLock != null) {
if (wifiLock.isHeld()) {
wifiLock.release();
Log.i("ServiceAlarmBroadcastReceiver", "WiFi Lock released!");
}
}
}
}
}
【问题讨论】:
-
您如何确定问题出在 WiFi 连接进入休眠状态。 “无法访问网络”消息可能有其他原因。您是否观看了连接广播,或使用
WifiManager检查了 WiFi 状态或其他任何东西来证实您的理论?
标签: android