Wi-Fi просто переходит в режим ожидания
Я написал некоторое программное обеспечение, которое использует Wi-Fi в качестве возможного средства подключения к Интернету. Однако я заметил, что через некоторое время (я предполагаю около 15-20 минут) после того, как устройство перейдет в режим энергосбережения (в любом случае, когда экран стал черным) соединение с Wi-Fi просто оборвется, хотя оно все еще используется:(Это на ADP 2 (таким образом, Google Ion с Android 1.6)... Я смог получить следующий журнал:
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
Это какая-то известная ошибка / функция? Если так, как обойти это? Также есть ли способ перехватить это СОБЫТИЕ, а затем проигнорировать его или переустановить соединение Wi-Fi? заранее спасибо
3 ответа
Вам нужно создать замок Wi-Fi. Вот как вы это делаете:
WifiManager wifimanager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiLock lock = wifimanager.createWifiLock("my_lock");
lock.acquire();
// your code here
lock.release();
Обратите внимание, что блокировку Wi-Fi следует создавать только при активном использовании Wi-Fi (т. Е. При загрузке большого файла), в противном случае это может повлиять на время автономной работы.
Я получаю исключение SecurityException при вызове WifiLock.acquire(). Я пропускаю разрешение на использование в моем манифесте или мне нужно что-то предварительно проверить в коде? Я предполагаю, что это связано с расширенными настройками на странице настроек Wi-Fi, установленной на НИКОГДА.
Получение блокировки Wi-Fi не является предпочтительным решением для этого. Цель блокировки Wi-Fi - удерживать ее только при активном доступе к сети, то есть при загрузке файла. Например, Skype и Google HangOut не берут и не блокируют Wi-Fi. Вы должны делать то, что сказал Мартин Молнар в своем комментарии выше. Вы должны позволить пользователю решить, хочет ли он разрешить своему устройству (и вашему приложению на своем устройстве) оставаться подключенным к Wi-Fi, когда дисплей отключен с помощью настройки "Wi-Fi активен во время сна". Если вы абсолютно настаиваете на том, чтобы ваше приложение оставляло Wi-Fi включенным даже через 15 минут после выключения дисплея, даже если пользователь установил "WiFi в спящем режиме в спящем режиме" на "Нет", вы должны взять на себя функцию Partial Wake Lock. Снова скайп не берет Частичный Wake Lock.
Если вы действительно хотите иметь удобное приложение, которое может получать данные / уведомления асинхронно, то вам нужно настроить push-уведомления GCM.