iOS
Kontrollera om nätverksanslutning
Sök…
Anmärkningar
Källkoden för Reachability.h
och Reachability.m
kan hittas på Apples utvecklardokumentation site .
förbehåll
Till skillnad från andra plattformar kommer Apple ännu inte att tillhandahålla en standarduppsättning API: er för att bestämma en iOS-enhets nätverksstatus och endast erbjuda dessa kodexempel länkade ovan. Källfilen ändras över tid, men när de importerats till ett app-projekt uppdateras de sällan av utvecklarna.
Av denna anledning tenderar de flesta apputvecklare att använda ett av de många Github / Cocoapod- underhållna biblioteken för att nå.
Apple rekommenderar också, för förfrågningar gjorda på användarens begäran, att du alltid försöker en anslutning först , innan du använder Reachability / SCNetworkReachability för att diagnostisera felet eller vänta på att anslutningen kommer tillbaka .
Skapa en Reachability-lyssnare
Apples Reachability- klass kontrollerar regelbundet nätverksstatus och varnar observatörer om förändringar.
Reachability *internetReachability = [Reachability reachabilityForInternetConnection];
[internetReachability startNotifier];
Lägg till observatörer till nätverksförändringar
Reachability
använder NSNotification
meddelanden för att varna observatörer när nätverksstatus har ändrats. Din klass måste bli observatör.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
På andra håll i din klass, implementera metodsignatur
- (void) reachabilityChanged:(NSNotification *)note {
//code which reacts to network changes
}
Varning när nätverket blir otillgängligt
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* reachability = [note object];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
if (netStatus == NotReachable) {
NSLog(@"Network unavailable");
}
}
Varning när anslutningen blir ett WIFI- eller mobilnätverk
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* reachability = [note object];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"Network unavailable");
break;
case ReachableViaWWAN:
NSLog(@"Network is cellular");
break;
case ReachableViaWiFi:
NSLog(@"Network is WIFI");
break;
}
}
Verifiera om det är anslutet till nätverket
Snabb
import SystemConfiguration
/// Class helps to code reuse in handling internet network connections.
class NetworkHelper {
/**
Verify if the device is connected to internet network.
- returns: true if is connected to any internet network, false if is not
connected to any internet network.
*/
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
}
if NetworkHelper.isConnectedToNetwork() {
// Is connected to network
}
Objective-C:
vi kan kontrollera nätverksanslutning inom några kodrader som:
-(BOOL)isConntectedToNetwork
{
Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
if (networkStatus == NotReachable)
{
NSLog(@"There IS NO internet connection");
return false;
} else
{
NSLog(@"There IS internet connection");
return true;
}
}