2010-06-10 82 views
2

我已经写了一些使用Wifi作为可能的互联网连接媒体的软件.. 虽然我确实注意到,经过一段时间(我猜测在15-20分钟左右)进入省电模式(反正当屏幕变黑时),Wifi连接将被简单地删除,即使它仍在使用:(这在ADP 2上(因此是Android 1.6版的Google Ion)... I能得到以下日志:??Wifi只是进入空闲状态

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 

这是某种已知的bug /功能如果是这样怎么去解决它 也就是有什么方法实际上拦截此事件,然后soimehow ignor它或重新设置WiFi连接? 在此先感谢

+1

所以这可能是一种省电功能,所以你不想让wifi掉线或不想让手机进入睡眠状态。可能想检查入门锁。 – 2010-06-10 14:13:53

+1

用户可以通过设置/无线和网络/ Wi-Fi设置/按菜单/高级/ Wi-Fi睡眠策略来设置“Wi-Fi睡眠策略”。选项有“当屏幕关闭时”,“从不插入”和“从不”。总结一下:是的,这是一个功能:D – 2010-06-10 14:45:45

回答

4

您需要创建一个wifi锁。这里是你如何做到这一点:

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

lock.acquire(); 

// your code here 

lock.release(); 

注意,当您正在积极使用Wi-Fi,你应该只创建一个WiFi锁定(即下载大文件),否则就会无谓地影响电池寿命。

+0

hhmm我应该先检查一下wifi连接是否可用/设置,或者我可以放一个锁,如果没有wifi连接,API将处理该问题? – TiGer 2010-06-11 08:36:36

+0

好问题。文档没有提到它,但我想象当没有WiFi连接时,锁定没有效果。 – ian 2010-06-14 07:56:53

0

当我调用WifiLock.acquire()时,出现SecurityException。我在清单中是否缺少使用权限?或者是否有需要事先在代码中检查的内容? 我假设它必须使用wifi设置页面中的高级设置永远不会设置。

+2

你会需要: <使用权限android:name =“android.permission.ACCESS_WIFI_STATE”/> <使用权限android:name =“android.permission.WAKE_LOCK”/> – TiGer 2010-10-18 07:45:17

+0

谢谢我会试试今晚让大家知道它是如何发展的。这听起来像我正在寻找的东西。 – 2010-10-25 18:55:05

+0

工作。将ACCESS_WIFI_STATE和WAKE_LOCK权限添加到清单让我可以毫无例外地使用WifiLock.acquire()方法。现在我的应用程序可以通过WiFi流式传输音乐,只要您想锁定屏幕即可。谢谢! – 2010-11-24 17:06:30

0

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

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

相关问题