【问题标题】:Wifi just goes into IDLEWifi 刚刚进入 IDLE
【发布时间】:2011-03-02 04:16:13
【问题描述】:

我编写了一些使用 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 连接? 提前致谢

【问题讨论】:

  • 所以这可能是一个省电功能,所以你不想wifi掉线还是不想让手机进入睡眠状态。可能想要检查唤醒锁。
  • 用户可以通过设置/无线和网络/Wi-Fi设置/按菜单/高级/Wi-Fi睡眠策略设置“Wi-Fi睡眠策略”。选项有“屏幕关闭时”、“插入时从不”和“从不”。总结一下:是的,这是一个功能:D

标签: android wifi standby power-saving


【解决方案1】:

您需要创建一个 wifi 锁。以下是你的做法:

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

lock.acquire();

// your code here

lock.release();

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

【讨论】:

  • hhmm 我应该事先检查 wifi 连接是否可用/设置,或者我可以设置一个锁,如果没有 wifi 连接,API 会处理吗?
  • 好问题。文档没有提到它,但我想当没有 wifi 连接时锁定无效。
【解决方案2】:

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

【讨论】:

  • 你需要:
  • 谢谢,今晚我会试一试,让大家知道进展如何。这听起来就像我一直在寻找的东西。
  • 那行得通。将 ACCESS_WIFI_STATE 和 WAKE_LOCK 权限添加到清单让我可以毫无例外地使用 WifiLock.acquire() 方法。现在,我的应用程序可以在屏幕锁定的情况下通过 wifi 流式传输音乐。谢谢!
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2012-04-07
    • 2011-07-31
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多