2011-12-06 22 views
7

निर्धारित करना मुझे पता है कि पहुंच योग्यता उदाहरण वाईफ़ाई या सेल के माध्यम से नेटवर्क पहुंच योग्य है या नहीं, लेकिन यह निर्धारित करने का कोई तरीका है कि सेल कनेक्शन 3 जी या EDGE से अधिक है या नहीं?3 जी बनाम एज

उत्तर

0

नहीं, सेल कनेक्टिविटी के भीतर नेटवर्क तकनीक का सार्वजनिक पता लगाने जैसी कोई चीज़ नहीं है।

+0

क्या हमारे निजी एपीआई को लागू करने के लिए कोई संदर्भ है जो नेटवर्क विशेषताओं की गणना करता है जैसे कनेक्टेड नेटवर्क की विलंबता और बैंडविड्थ। – iPhonedev

10

निजी एपीआई का उपयोग करके, आप सीधे स्टेटस बार में यह जानकारी पढ़ सकते हैं।

https://github.com/nst/MobileSignal/blob/master/Classes/UIApplication+MS.m

+ (NSNumber *)dataNetworkTypeFromStatusBar { 

    UIApplication *app = [UIApplication sharedApplication]; 

    UIStatusBar *statusBar = [app valueForKey:@"statusBar"]; 

    UIStatusBarForegroundView *foregroundView = [statusBar valueForKey:@"foregroundView"]; 

    NSArray *subviews = [foregroundView subviews]; 

    UIStatusBarDataNetworkItemView *dataNetworkItemView = nil; 

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

    return [dataNetworkItemView valueForKey:@"dataNetworkType"]; 
} 
+1

आप शायद इसे '@ [email protected] catch' ब्लॉक में लपेटना चाहते हैं, ऐसा लगता है कि यह भविष्य के आईओएस संस्करण में बदल सकता है। +1 हालांकि, बहुत अच्छा! – hypercrypt

+1

क्या यह सेब द्वारा स्वीकार किया जाता है? ऐप स्टोर में प्रकाशित करने के लिए ...? –

+0

समाधान निजी एपीआई पर निर्भर करता है और यह एक नाजुक तर्क भी है जो किसी भी बिंदु पर टूट सकता है। – DevGansta

14

मामूली सरलीकृत NST के कोड के संस्करण संकलक चेतावनी मैं XCode 4.5 में मिला मौन करने:

- (NSNumber *) dataNetworkTypeFromStatusBar { 

    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; 
     } 
    } 
    return [dataNetworkItemView valueForKey:@"dataNetworkType"]; 
} 

और मान कुंजियों मैं अब तक मिल गया है:

  • 0 = कोई वाईफ़ाई या सेलुलर
  • 1 = 2 जी और इससे पहले? (पुष्टि नहीं)
  • 2 = 3 जी? (पुष्टि अभी तक नहीं)
  • 3 = 4 जी
  • 4 = एलटीई
  • 5 = वाईफ़ाई
+0

भयानक धन्यवाद बहुत –

+0

ऐप पृष्ठभूमि में होने पर स्थिति कैसे प्राप्त कर सकता है –

+0

क्या यह निजी एपीआई है? यदि हां, तोब को खारिज कर दिया जाएगा? कोई उपाय? –

27

iOS 7 के रूप में, अब ऐसा करने के लिए एक सार्वजनिक तरीका है:

CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new]; 
NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology); 
[NSNotificationCenter.defaultCenter addObserverForName:CTRadioAccessTechnologyDidChangeNotification 
               object:nil 
               queue:nil 
              usingBlock:^(NSNotification *note) 
{ 
    NSLog(@"New Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology); 
}]; 

my article in objc.io.

+0

क्या इस समाधान के लिए वाईफाई विकल्प को शामिल करने का कोई आसान तरीका है? – Michal

+0

ओह अब मैं देखता हूं - फ्रेमवर्क द्वारा वाईफाई = एचएसपीडीए। – Michal

+0

समस्या यह है कि कभी-कभी आरएटी बदल गया है और नोटिफिकेशन शून्य देता है ... – davidOhara

7

टेलीफ़ोनीइन्फोर्नेंटरैडियोएपटेक्नोलॉजी मानों पर अधिक पढ़ें और पढ़ें:

CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyGPRS   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyEdge   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyWCDMA   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyHSDPA   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyHSUPA   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMA1x  __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORev0 __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORevA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORevB __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyeHRPD   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyLTE __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0); 

मुझे लगता है कि ये सभी संभावित मूल्य हैं।

संबंधित मुद्दे