2009-09-04 4 views
7

Obwohl es relativ einfach zu bestimmen, ob ein iPhone auf Wifi oder ein Datennetzwerk programmgesteuert in Ihrer Anwendung ist, kann ich nicht herausfinden, ob das iPhone ist auf Edge oder 3G.Wie zu bestimmen, ob Benutzer auf Edge oder 3G auf iPhone ist

Jeder herauszufinden, einen Weg, um dies zu bestimmen?

Hinweis: Ich mache mir keine Sorgen über die Apple AppStore-Akzeptanzrichtlinien, sodass es mir nichts ausmacht, in meiner App etwas Hacky zu machen. (Die iPhones sollten jedoch nicht jailbroken sein müssen)

+1

Ich bin auch auf der Suche nach der Antwort auf diese Frage. Wenn Sie in der Lage sind, eine Lösung zu finden, schreiben Sie es bitte hier. Vielen Dank! –

Antwort

4

Das iPhone stellt Entwicklern diese Art von Informationen nicht programmgesteuert zur Verfügung. Das Beste, auf das Sie hoffen können, ist zu bestimmen, ob eine Verbindung zu einem bestimmten Host über ein Zellennetzwerk geroutet werden muss - siehe SCNetworkReachability Referenz und das Reachability Projekt für mehr.

1

Angenommen, die Antwort von Tim ist richtig, eine Möglichkeit, können Sie feststellen, ob der Benutzer auf 3G oder Edge ist, können Sie die Geschwindigkeit der Verbindung testen, indem Sie einen Timer starten mit der App eine Datei aus dem Internet herunterladen und berechnen Geschwindigkeit, sollten Sie in der Lage sein zu sagen, ob sie auf 3G oder Edge durch den Unterschied in den Geschwindigkeiten sind.

+1

Dies ist nicht immer zuverlässig - eine sehr schlechte 3G-Verbindung kann die gleiche Art von Durchsatz wie eine große EDGE-Verbindung haben. Es wäre mehr Rätselraten als alles andere. Darüber hinaus gibt es neben der Geschwindigkeit noch weitere Indikatoren; Ein weiterer großer Unterschied zwischen den Verbindungen ist die Zeit bis zum ersten Antwortpaket (EDGE neigt dazu, hier zu gewinnen). – Tim

+1

Aber der Vorteil des Ratens basierend auf gemessen, ist, dass, selbst wenn Sie denken, Sie sind auf Edge, aber wirklich auf 3G - Sie werden wahrscheinlich das Richtige tun, eine niedrigere Bandbreite zu verwenden, wenn die 3G-Verbindungsgeschwindigkeit ist genauso langsam wie Edge wäre gewesen. –

-3

eine Möglichkeit, Sie iPhone 2G sicher erkennen kann, ist auf dem Gerätenamen zu suchen, wie die OS gemeldet

#import <sys/utsname.h> 
+ (NSString *)deviceType { 
    struct utsname u; 
    uname(&u); 
    NSString *returnValue = [NSString stringWithFormat:@"%s", u.machine]; 

    return returnValue; 
} 

der Rückgabewert Sie suchen, ist „iPhone1,1“ zu angezeigt iPhone 2G. kombinieren diese mit dem Erreichbarkeits-Projekt zu sagen, wenn sie auf einem Zellennetz sind und Sie haben Sie 1 avenue zu garantieren, dass sie

Prüfung an einer Randverbindung sind
+1

3G bedeutet nicht, dass das "iPhone 3G" in diesem Fall – Manni

+0

nicht für das iPhone 3G gedacht war. schau dir die Aussage an. "Garantieren, dass sie mit dem iPhone 2G nervös sind" sagt nichts über das iPhone 3G. – scootklein

0

Probieren Sie es aus der Statusleiste:

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 
NSNumber *dataNetworkItemView = nil; 

for (id subview in subviews) { 
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { 
     dataNetworkItemView = subview; 
     break; 
    } 
} 
int connectivity; 
connectivity = [dataNetworkItemView valueForKey:@"dataNetworkType"]; 

Und die Wertschlüssel, die ich bisher gefunden habe:

0 = No wifi or cellular 

1 = 2G and earlier? (not confirmed) 

2 = 3G? (not yet confirmed) 

3 = 4G 

4 = LTE 

5 = Wifi 
Verwandte Themen