Question

J'ai écrit un logiciel qui utilise Wifi comme moyen possible connexion Internet .. J'ai remarqué cependant, qu'après un certain temps (je devine autour des 15-20 minutes) après que le dispositif est entré dans le mode d'économie d'énergie (de toute façon lorsque l'écran est devenu noir), la connexion Wifi sera simplement abandonné, même si elle est encore utilisé :( Ce sur un ADP 2 (donc un ion Google avec Android 1.6) ... J'ai pu obtenir le journal suivant:

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

Est-ce une sorte de bug / fonctionnalité connue? Si oui, comment la contourner? Aussi est-il someway à fait intercepter cet événement et puis ignorer soimehow ou re-configurer une connexion wifi? Merci à l'avance

Était-ce utile?

La solution

Vous devez créer un verrou wifi. Voici comment vous le faites:

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

lock.acquire();

// your code here

lock.release();

Remarque vous ne devez créer un verrou wifi lorsque vous utilisez activement wifi (à savoir le téléchargement d'un fichier volumineux), sinon vous la vie de la batterie d'impact inutilement.

Autres conseils

Je reçois un SecurityException quand je l'appelle WifiLock.acquire (). Est-ce que je manque une utilisation-autorisation dans mon manifeste ou est-il quelque chose que je dois vérifier au préalable dans le code? Je suppose qu'il doit faire avec les paramètres avancés dans le jeu de pages de connexion Wi-Fi à jamais.

Obtenir un verrouillage Wi-Fi est pas la solution préférée à ce sujet. L'intention de la serrure Wi-Fi est de ne tenir que lorsque vous accédez activement au réseau, à savoir le téléchargement d'un fichier. Par exemple. Skype et Google Hangout ne prennent pas et de garder la serrure Wi-Fi. Vous êtes censé faire ce que dit Martin Molnar dans son commentaire ci-dessus. Vous êtes censé permettre à l'utilisateur de décider s'il veut permettre à son appareil (et votre application sur son appareil) pour rester connecté au WiFi lorsque l'écran est éteint via le paramètre « WiFi éveillé tout en sommeil ». Si vous insistez absolument que votre application devrait garder le WiFi même 15min après l'écran est éteint, même si le jeu utilisateur « WiFi éveillé alors dans le sommeil » à « non », alors vous êtes censé prendre le réveil partiel de verrouillage. Encore une fois Skype ne prend pas le verrouillage partiel de réveil.

Si vous voulez vraiment avoir une marée noire App qui peut recevoir des données / notifications de manière asynchrone, vous devez configurer les notifications push de GCM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top