दिलचस्प पोस्ट
कोर को कैसे अनुमति दें? अलग-अलग राज्य के लिए छवि बटन पृष्ठभूमि छवि कैसे सेट करें? गैर-अंतिम क्षेत्र का सिंक्रनाइज़ेशन क्लिक किए गए बटन की आईडी प्राप्त करने के लिए JavaScript – onClick जावा में सॉफ्टरेफरेंस और वीक रेफरेंस के बीच क्या अंतर है? त्रुटि: mksdcard SDK उपकरण चलाने में असमर्थ मैं टच सक्षम ब्राउज़र में एक स्पर्श के साथ एक मंडराना कैसे अनुकरण करूं? जावा में नेस्टेड छोरों से बाहर तोड़ना मैं किसी तत्व को एक वर्ग कैसे जोड़ूं? LINQ को इकाईयों को 'डबल पार्स (सिस्टम। स्ट्रिंग)' विधि की पहचान नहीं है, और इस पद्धति को किसी स्टोर अभिव्यक्ति में अनुवाद नहीं किया जा सकता है सीएसएस 3 के साथ ब्लिंकिंग / फ्लैशिंग पाठ कैसे करें? getHeight सभी Android UI ऑब्जेक्ट के लिए 0 देता है कार्यों में PHP वैश्विक जावा में लिंक्ड सूची की एक सरणी नहीं बना सकता …? प्रारूप फ़ाइल का आकार MB, GB आदि के रूप में

आईओएस 3 जी या वाईफ़ाई का पता लगाएं

मुझे यकीन नहीं है कि यह संभव है, लेकिन मेरे पास यह परिदृश्य है

मेरे पास एक UIWebView में एक वेबसाइट है, जिस पर लिंक एक UISegmentedController में सेट है। वे वेबसाइट का पता लगा सकते हैं कि क्या आप वाईफ़ाई पर हैं या 3 जी नेटवर्क पर हैं।

अब खंड वाले नियंत्रक 2 अलग-अलग पृष्ठों को इंगित करता है 1 – एक iPhone अनुकूल लॉगिन स्क्रीन 2 – मुख पृष्ठ, एक बार जब आप लॉग इन हो जाते हैं

अब यह सवाल है:

क्या मैं अपने आवेदन को यह पता लगाने के लिए प्रोग्राम कर सकता हूं कि यह वाईफ़ाई या 3 जी पर है (मुझे पता है कि आप ऐसा कर सकते हैं), लेकिन फिर उत्तर के आधार पर सेगमेंट 1 या 2 पर जाएं

इस प्रकार की तरह:

if(iPhone device is on 3g) { Go to Segment 1; } else { Go to Segment 0; } 

वेब के समाधान से एकत्रित समाधान "आईओएस 3 जी या वाईफ़ाई का पता लगाएं"

कोड सेब के प्रयोग से यहां उपलब्ध है

 Reachability *reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus status = [reachability currentReachabilityStatus]; if(status == NotReachable) { //No internet } else if (status == ReachableViaWiFi) { //WiFi } else if (status == ReachableViaWWAN) { //3G } 

यदि आप रीचैबिलिटी लाइब्रेरी आयात करना चाहते हैं या नोटिफ़ायर से निपटने के लिए नहीं चाहते हैं, तो आप इस साधारण तुल्यकालिक विधि का उपयोग कर सकते हैं:

 typedef enum { ConnectionTypeUnknown, ConnectionTypeNone, ConnectionType3G, ConnectionTypeWiFi } ConnectionType; + (ConnectionType)connectionType { SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, "8.8.8.8"); SCNetworkReachabilityFlags flags; BOOL success = SCNetworkReachabilityGetFlags(reachability, &flags); CFRelease(reachability); if (!success) { return ConnectionTypeUnknown; } BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); BOOL isNetworkReachable = (isReachable && !needsConnection); if (!isNetworkReachable) { return ConnectionTypeNone; } else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { return ConnectionType3G; } else { return ConnectionTypeWiFi; } } 

एप्पल की रीचैबिलिटी आयात करें और इसे आज़माएं,

 #import "Reachability.h" #import <CoreTelephony/CTTelephonyNetworkInfo.h> //Try this Reachability *reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus status = [reachability currentReachabilityStatus]; if(status == NotReachable) { NSLog(@"none"); //No internet } else if (status == ReachableViaWiFi) { NSLog(@"Wifi"); //WiFi } else if (status == ReachableViaWWAN) { NSLog(@"WWAN"); //connection type CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; _carrier = [[netinfo subscriberCellularProvider] carrierName]; if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) { NSLog(@"2G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { NSLog(@"2G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) { NSLog(@"2G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { NSLog(@"4G"); } } 

संदर्भ (कड़ियाँ भविष्य में टूट सकती हैं):

  • आईओएस 3 जी या वाईफ़ाई का पता लगाएं
  • वाहक कनेक्शन प्रकार का पता लगाएं (3 जी / ईडीजीई / जीपीआरएस)
  • 1 जी, 2 जी, 3 जी, 4 जी और 5 जी के बीच अंतर क्या है?
  • CDMA2000
  • विकी 2 जी
  • सीडीएमए और डब्ल्यूसीडीएमए नेटवर्क सिम के बीच अंतर क्या है

  • "EV-DO Rev. A" क्या है?

मैंने एक बहुत ही साधारण ब्लॉक्ड आधारित रिचाबैबिलिटी आवरण बनाया है जो सभी पुरानी सी-जैसे रिचाएबिलिटी कोड को स्ट्रिप्स बनाता है, जो बहुत अधिक कोको फॉर्म में डालता है।

उपयोग की तरह:

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

ईपीपीज़! ब्लॉग पर हर रोज इस्तेमाल के लिए ब्लॉकों के साथ रीचैबिलिटी देखें, या सीधे ईपीपीज़ से पकड़ो! GitHub पर पहुंच योग्यता

यह आईपी ​​पते के साथ भी काम करता है , जो एक बहुत ही दुर्लभ रीचैबिलिटी रैपर सुविधा के रूप में निकला।

तेजी से हम इसका उपयोग कर सकते हैं:

 func getNetworkType()->String { do{ let reachability:Reachability = try Reachability.reachabilityForInternetConnection() do{ try reachability.startNotifier() let status = reachability.currentReachabilityStatus if(status == .NotReachable){ return "" }else if (status == .ReachableViaWiFi){ return "Wifi" }else if (status == .ReachableViaWWAN){ let networkInfo = CTTelephonyNetworkInfo() let carrierType = networkInfo.currentRadioAccessTechnology switch carrierType{ case CTRadioAccessTechnologyGPRS?,CTRadioAccessTechnologyEdge?,CTRadioAccessTechnologyCDMA1x?: return "2G" case CTRadioAccessTechnologyWCDMA?,CTRadioAccessTechnologyHSDPA?,CTRadioAccessTechnologyHSUPA?,CTRadioAccessTechnologyCDMAEVDORev0?,CTRadioAccessTechnologyCDMAEVDORevA?,CTRadioAccessTechnologyCDMAEVDORevB?,CTRadioAccessTechnologyeHRPD?: return "3G" case CTRadioAccessTechnologyLTE?: return "4G" default: return "" } // Get carrier name }else{ return "" } }catch{ return "" } }catch{ return "" } } 

कक्षा विधि का पालन करना है

 +(NSString*)connectedNetworkType { Reachability *reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus status = [reachability currentReachabilityStatus]; if(status == NotReachable) { NSLog(@"none"); //No internet } else if (status == ReachableViaWiFi) { NSLog(@"Wifi"); //WiFi return @"Wifi"; } else if (status == ReachableViaWWAN){ NSLog(@"WWAN"); //connection type CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; // _carrier = [[netinfo subscriberCellularProvider] carrierName]; if (([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x])) { NSLog(@"2G"); return @"2G"; } else if (([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD])){ NSLog(@"3G"); return @"3G"; } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { NSLog(@"4G"); return @"4G"; } } return @"-1";//default unknown } 
 #import <ifaddrs.h> #import <arpa/inet.h> BOOL CheckWiFi() { struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; BOOL hasWifi = NO; int err = getifaddrs(&interfaces); if(err == 0) { temp_addr = interfaces; while(temp_addr) { if(temp_addr->ifa_addr->sa_family == AF_INET) { struct sockaddr_in *addr = (struct sockaddr_in *)temp_addr->ifa_addr; if(memcmp(temp_addr->ifa_name, "en", 2) == 0) { hasWifi = YES; break; } } temp_addr = temp_addr->ifa_next; } } freeifaddrs(interfaces); return hasWifi; } 

यह जांचने के लिए कि क्या आप वाईफ़ाई में हैं, यह कनेक्शन बनाने की महंगी जाँच बचाता है इंटरनेट साझाकरण की जांच के लिए ifa_name "bridge" की जांच करें।

यहां एप्पल से सरलपिंग के साथ आईओएस 6 के लिए एक अद्यतन संस्करण भी शामिल है। यह एआरसी संगत है और मैं किसी अन्य व्यक्ति के फिक्स से रीचैबिलिटी के लिए शुरू किया। http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/

मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

अगर आप ज़ामारीन या मोनोचौच का उपयोग कर रहे हैं तो आप एक्सैमरिन गीथहब रिपॉजिटरी से रिचीबिलिटी एड्रेस क्लास का उपयोग कर सकते हैं:

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

इसलिए इसे अपने प्रोजेक्ट में जोड़ें और Reachability.InternetConnectionStatus() कॉल करें

इस एक का उपयोग करें, रीचैबिलिटी के साथ बनाया गया है और उपयोग में आसान, एकीकृत करने के लिए कोड की कुछ पंक्ति कनेक्शन को http://Huytd.github.io/datatify/ बदलते समय आपको बताने के लिए एक कॉलबैक फ़ंक्शन है