Je rencontre des problèmes pour obtenir des résultats cohérents lorsque je vérifie si le réseau est disponible ou non. J'utilise cet extrait de code dans une classe AppPreferences pour vérifier la disponibilité d'un réseau.La vérification de disponibilité du réseau renvoie false mais le téléphone est en ligne.
/**
* @return the networkAvailable
*/
public boolean isNetworkAvailable() {
connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
networkAvailable = connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isConnected();
return networkAvailable;
}
Avant chaque course, je mets le contexte comme ci-dessous:
timer.scheduleAtFixedRate(
new TimerTask() {
public void run() {
appPreferences.setContext(getBaseContext());
if (appPreferences.isNetworkAvailable()){
// perform task
}
}
},
0,
UPDATE_INTERVAL);
Je ne sais que ce n'est pas lié au fil de fond que j'ai un appel OnReceive faire la même logique et encore cette vérification échoue .
Il semble se produire principalement quand il se déplace entre une connexion de données cellulaire et à wifi, ou vice versa. Le contexte dans lequel il a été créé semble rester même si je le mets à jour.
Quelqu'un at-il une idée de ce qui pourrait être le problème ici?
essayez-vous cela dans l'émulateur? parce que j'ai vu un comportement étrange aussi. Par exemple, j'ai essayé de couper la connexion réseau en appuyant sur F8 dans l'émulateur, mais il peut toujours atteindre Internet. – Erdal
Non, cela se passe pour une application en direct et je suis plus que perplexe pourquoi cela arrive. Il semble être bloqué au contexte initial et ne met pas à jour cette information de réseau quand il se déplace entre les réseaux. – Erik
Erdal: Vérifiez la réponse ci-dessous. Si c'est vrai alors je ne suis pas très content car cela rend cet appel plutôt inutile. J'espère avoir tort. :-) – Erik