簡體   English   中英

如何確定用戶是在iPhone上的Edge還是3G

[英]How to determine whether user is on Edge or 3G on iPhone

雖然在應用程序中以程序方式確定iPhone是否在Wifi或數據網絡上是相對簡單的,但我無法找到確定iPhone是在Edge還是3G上的方法。

有人想辦法確定這個嗎?

注意:不擔心Apple AppStore接受政策,所以我不介意在我的應用程序中做一些hacky。 (雖然iPhone不應該被越獄)

iPhone不以編程方式向開發人員提供此類信息。 您可以期望的最好方法是確定是否必須通過單元網絡路由到給定主機的連接 - 有關詳細信息,請參閱SCNetworkReachability參考和Reachability項目。

假設Tim的答案是正確的,你可以通過一種方式判斷用戶是處於3G還是邊緣,你可以通過啟動計時器來測試連接的速度,該計時器讓應用程序從網上下載一些文件並計算速度,你應該能夠通過速度的差異來判斷它們是在3G還是Edge上。

嘗試從狀態欄檢查它:

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"];

到目前為止我找到的價值鍵:

0 = No wifi or cellular

1 = 2G and earlier? (not confirmed)

2 = 3G? (not yet confirmed)

3 = 4G

4 = LTE

5 = Wifi

一種可以檢測iPhone 2G的方法是查看操作系統報告的設備名稱

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

    return returnValue;
}

您正在尋找的返回值是指示iPhone 2G的“iPhone1,1”。 將它與Reachability項目結合起來,告訴他們什么時候他們在一個小區網絡上,你有一條途徑來保證他們在邊緣連接上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM