2

我已经编写了一些使用 Wifi 作为可能的互联网连接介质的软件。但我确实注意到,在设备进入省电模式后一段时间(我猜大约 15-20 分钟)(无论如何,当屏幕变黑了)Wifi连接将被简单地丢弃,即使它仍在使用:(这在ADP 2上(因此是带有Android 1.6的Google Ion)......我能够获得以下日志:

06-10 15:04:27.009: DEBUG/WifiService(72): got ACTION_DEVICE_IDLE
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-STATE-CHANGE id=0 state=8]
06-10 15:04:27.079: VERBOSE/WifiStateTracker(72): Changing supplicant state: COMPLETED ==> DORMANT
06-10 15:04:27.079: DEBUG/WifiStateTracker(72): Deconfiguring interface and stopping DHCP
06-10 15:04:27.099: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys]
06-10 15:04:27.099: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=8]
06-10 15:04:27.139: WARN/Smack/Packet(169): notify conn break (IOEx), close connection
06-10 15:04:27.139: DEBUG/Smack(169): [XMPPConn] close connection, notifyClosed=false
06-10 15:04:27.139: ERROR/MediaPlayer(390): error (1, -17)
06-10 15:04:27.139: ERROR/MediaPlayer(390): Error (1,-17)
06-10 15:04:28.109: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-DRIVER-STATE STOPPED]
06-10 15:04:28.129: VERBOSE/WifiStateTracker(72): New network state is DISCONNECTED
06-10 15:04:28.129: VERBOSE/WifiStateTracker(72): Changing supplicant state: DORMANT ==> DORMANT
06-10 15:04:28.189: INFO/MediaUploader(199): No need to wake up
06-10 15:04:28.189: DEBUG/GpsLocationProvider(72): updateNetworkState available
06-10 15:04:28.189: DEBUG/GpsLocationProvider(72): NetworkThread wait for 4484259ms
06-10 15:04:28.289: DEBUG/NetworkLocationProvider(72): onDataConnectionStateChanged 3
06-10 15:04:28.299: DEBUG/GpsLocationProvider(72): state: CONNECTING apnName: iinternet reason: null
06-10 15:04:32.979: DEBUG/NetworkLocationProvider(72): onDataConnectionStateChanged 3
06-10 15:04:33.029: DEBUG/GpsLocationProvider(72): state: CONNECTED apnName: iinternet reason: null
06-10 15:04:33.099: DEBUG/GpsLocationProvider(72): updateNetworkState available
06-10 15:04:33.099: DEBUG/GpsLocationProvider(72): NetworkThread wait for 4479355ms
06-10 15:04:33.129: INFO/MediaUploader(199): No need to wake up
06-10 15:04:33.299: INFO/ActivityManager(72): Stopping service: com.android.mms/.transaction.TransactionService
06-10 15:04:33.339: ERROR/TransactionSettings(156): Invalid APN setting: MMSC is empty
06-10 15:04:33.419: INFO/ActivityManager(72): Stopping service: com.android.providers.downloads/.DownloadService
06-10 15:04:38.309: DEBUG/dalvikvm(199): GC freed 301 objects / 19232 bytes in 92ms
06-10 15:04:43.349: DEBUG/dalvikvm(216): GC freed 1430 objects / 84920 bytes in 121ms
06-10 15:04:48.319: DEBUG/dalvikvm(156): GC freed 323 objects / 15152 bytes in 96ms

这是某种已知的错误/功能吗?如果是这样如何解决它?还有什么方法可以实际拦截这个事件,然后如何忽略它或重新设置 wifi 连接?提前致谢

4

3 回答 3

4

您需要创建一个 wifi 锁。这是您的操作方法:

WifiManager wifimanager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiLock lock = wifimanager.createWifiLock("my_lock");

lock.acquire();

// your code here

lock.release();

请注意,您应该只在您积极使用 wifi(即下载大文件)时创建 wifi 锁,否则您将不必要地影响电池寿命。

于 2010-06-10T14:13:11.777 回答
0

当我调用 WifiLock.acquire() 时出现 SecurityException。我是否在清单中缺少使用权限,或者我需要事先在代码中检查什么?我假设它与设置为从不的 wifi 设置页面中的高级设置有关。

于 2010-10-18T05:32:03.970 回答
0

获得 Wi-Fi 锁并不是解决此问题的首选解决方案。Wi-Fi 锁的目的是仅在您主动访问网络(即下载文件)时才持有它。例如,Skype 和 Google HangOut 不会占用并保持 Wi-Fi 锁定。您应该按照 Martin Molnar 在上面的评论中所说的去做。您应该让用户决定是否允许他的设备(以及他设备上的应用程序)在显示器关闭时通过“睡眠时 WiFi 唤醒”设置保持连接到 Wi-Fi。如果您绝对坚持让您的应用程序在显示屏关闭 15 分钟后保持 Wi-Fi 开启,即使用户将“睡眠时 WiFi 唤醒”设置为“否”,您也应该使用部分唤醒锁定。同样,Skype 不采用部分唤醒锁定。

如果你真的想要一个可以异步接收数据/通知的漂亮应用程序,那么你应该设置 GCM 推送通知。

于 2014-01-02T22:21:24.943 回答