111 votes

IOS Detecter 3G ou WiFi

Je ne suis pas sûr que cela soit possible, mais j'ai ce scénario.

J'ai un site Web affiché dans mon UIWebView qui a le lien configuré dans un UISegmentedController. Le site Web peut détecter si vous êtes sur le wifi ou sur le réseau 3G.

Maintenant, le contrôleur segmenté pointe vers 2 pages différentes : 1 - Un écran de connexion convivial pour iPhone 2 - La page d'accueil, une fois connecté.

Maintenant, voici la question :

Puis-je programmer mon application pour détecter si elle est sur WIFI ou 3G (je sais que c'est possible), puis en fonction de la réponse aller vers le segment 1 ou 2 ?

Un peu comme ceci :

si (le périphérique iPhone est sur 3G) {
    Aller au Segment 1;
} else {
    Aller au Segment 0;
}

2 votes

211voto

James Webster Points 16663

Utilisation du code fourni par Apple ici

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus status = [reachability currentReachabilityStatus];

if(status == NotReachable) 
{
    //Pas de connexion internet
}
else if (status == ReachableViaWiFi)
{
    //WiFi
}
else if (status == ReachableViaWWAN) 
{
    //3G
}

0 votes

Oui! Génial, ça a fonctionné!!! J'ai dû corriger certains fichiers de portée car ils avaient des erreurs pour iOS5, mais je suis tellement heureux maintenant. Malheureusement, je ne peux vous donner qu'un seul vote positif :-)

10 votes

Ne devriez-vous pas appeler [reachability stopNotifier] après avoir obtenu le statut ?

3 votes

Cela dépend de la portée dans laquelle vous utilisez ce code. Si cela se trouvait simplement dans une méthode, reachability sortirait de la portée et serait désalloué à la fin de la méthode et stopNotifier serait appelé implicitement.

8voto

Geri Points 3572

J'ai créé une enveloppe Reachability basée sur les blocs assez simple qui supprime tout le code Reachability obsolète de type C, pour le remplacer par une forme beaucoup plus Cocoa.

Utilisation:

[EPPZReachability reachHost:hostNameOrIPaddress
               completition:^(EPPZReachability *reachability)
{
    if (reachability.reachableViaCellular) [self doSomeLightweightStuff];
}];

Voir Reachability with blocks for everyday use sur eppz!blog, ou le télécharger directement depuis eppz!reachability sur GitHub.

Il fonctionne également avec les adresses IP, ce qui s'est avéré être une fonctionnalité assez rare pour une enveloppe Reachability.

19 votes

Ummm pourquoi la « capture d'écran»?

12 votes

Je l'ai trouvé sur le blog, un régal pour les yeux.

1voto

orafaelreis Points 835

Si vous utilisez Xamarin ou Monotouch, vous pouvez utiliser la classe adaptée de Reachability du dépôt GitHub de Xamarin :

https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.cs

Alors ajoutez-la à votre projet et appelez Reachability.InternetConnectionStatus()

0 votes

Le lien est brisé.

0voto

Etienne Bley Points 11

Voici une version mise à jour pour iOS 6 avec SimplePing d'Apple également incluse. Il est compatible avec ARC et j'ai commencé à partir de la correction d'une autre personne pour Reachability. http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/

J'espère que cela aidera quelqu'un.

-2voto

huydotnet Points 81

Utilisez celui-ci, construit avec Reachability et facile à utiliser, juste quelques lignes de code à intégrer. Dispose d'une fonction de rappel pour vous indiquer quand la connexion a changé http://huytd.github.io/datatify/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X