2012-11-16 11 views
10

मैं ऐप्पल के पहुंच क्षमता कोड का उपयोग कर रहा हूं, और जब नेटवर्क पहुंच क्षमता बदलती है और सर्वर कनेक्शन शुरू करने से पहले प्रारंभिक अधिसूचनाएं स्थापित कर रहा हूं। जब मैं वाई-फाई पर हूं तो कोड काम करता है और मैं वाई-फाई एक्सेस पॉइंट बंद कर देता हूं। हालांकि, जब मैं वाई-फाई और अंतर्निहित ब्रॉडबैंड कनेक्शन के साथ ऐप शुरू करता हूं, और उसके बाद ऐप चल रहा है, और फिर ब्रॉडबैंड राउटर से वाई-फाई राउटर को डिस्कनेक्ट करें (यानी वाई-फाई चालू है लेकिन कोई इंटरनेट नहीं है कनेक्टिविटी), और मैं एक पहुंच क्षमता जांचता हूं, मुझे प्राप्त होने वाली नेटवर्क स्थिति ReachableViaWiFi है। मैंने दोनों पहुंचने की कोशिश की है इंटरऑरनेट कनेक्शन और पहुंच योग्यताथोस्टनाम।वाई-फाई कनेक्ट होने पर पहुंचने योग्यता काम नहीं कर रही है लेकिन कोई इंटरनेट

किसी भी विचार पर अगर ऐप्पल के पहुंचने योग्य कोड का उपयोग ऐसी स्थिति का पता लगाने के लिए किया जा सकता है जहां वाईफ़ाई कनेक्ट है लेकिन कोई अंतर्निहित नेटवर्क कनेक्टिविटी नहीं है?

धन्यवाद!

उत्तर

5

ठीक है, मुझे इसका जवाब मिला - ऐप्पल की पहुंच योग्यता मेजबान को वास्तविक कनेक्टिविटी का परीक्षण नहीं करती है। नीचे अतः कड़ी में @Zhami द्वारा जवाब देखें:

How to write a simple Ping method in Cocoa/Objective-C

अनिवार्य रूप से, जब आप पहली बार एप्लिकेशन लॉन्च और एक गम्यता जांच, IOS DNS लुकअप करने के लिए लगता है, और अगर कोई इंटरनेट है, चेक विफल रहता है। तो पहली बार जब आप पहुंच की जांच करते हैं, तो यह वास्तव में एक सार्थक मूल्य देता है। हालांकि, अगर आपको ऐप लॉन्च पर पता चला है, और कुछ समय बाद इंटरनेट कनेक्टिविटी खो देता है (जबकि अभी भी वाईफाई/3 जी/4 जी से जुड़ा हुआ है लेकिन कोई अंतर्निहित इंटरनेट कनेक्टिविटी नहीं है), तो आगे पहुंचने योग्य चेक चेक पहुंच योग्य है, भले ही इंटरनेट या आपका निर्दिष्ट होस्ट पहुंच योग्य न हो अब और।

तो तुम सच में वास्तविक समय में कनेक्टिविटी के लिए जाँच करने के लिए चाहते हैं, तो निम्न का उपयोग करें:

-(BOOL) isConnected 
{ 

    NSString* url = [NSURL URLWithString:@"http://www.google.com/m"]; 
    ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]]; 
    [request setTimeOutSeconds:10]; 
//customize as per your needs - note this check is synchronous so you dont want to block the main thread for too long 
    [request setNumberOfTimesToRetryOnTimeout:0]; 
    [request startSynchronous]; 

    NSError *error = [request error]; 
    if (error) 
    { 
     DLog(@"connectivity error"); 
     return NO; 
    } 
    else 
    { 
     DLog(@"connectivity OK"); 
     return YES; 
    } 

} 
+0

यह काम नहीं करता है ... – user3079872

+0

यह काम करेगा, जब मैं जांचता हूं कि इंटरनेट उपलब्ध है या नहीं। कैसे इंटरनेट को डिस्कनेक्ट करते समय तुरंत इंटरनेट उपलब्ध नहीं है और तुरंत उपलब्ध नहीं है? – NandhaKumar

1

यह एक बहुत ही पुराने पोस्ट है, लेकिन यहाँ संदर्भ के लिए रह सकते हैं।

- (BOOL)startNotifier 
{ 
    BOOL returnValue = NO; 
    SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL}; 

    if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context)) 
    { 
     if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) 
     { 
      returnValue = YES; 
     } 
    } 

    return returnValue; 
} 

यह आपके _reachabilityRef नेटवर्क परिवर्तन के लिए अद्यतन रखेंगे: गम्यता उदाहरण वर्ग में आप नीचे दिए गए कोड पा सकते हैं।

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