2012-03-21 10 views
24

मैं नेटवर्क की स्थिति निर्धारित करने के लिए सफलतापूर्वक उपयोगिता का उपयोग कर रहा हूं, और परिवर्तनों के अधिसूचित होने के लिए (उदा। Reachability Guide for iOS 4)।वाई-फाई नेटवर्क छोड़ते समय पृष्ठभूमि में आईओएस में पहुंच क्षमता नोटिफिकेशन कैसे प्राप्त करें?

मेरा प्रश्न यह नहीं है कि पहुंचने योग्यता कैसे चल रही है और चल रही है, बल्कि निम्नलिखित है।

मेरा AppDelegate पहुंच योग्यता सामग्री को संभालता है। ऐप चल रहा है, जबकि ऐप चल रहा है, और जब ऐप पृष्ठभूमि में है (applicationDidEnterBackground:) ऐप नोटिफिकेशन प्राप्त करता है (kReachabilityChangedNotification)।

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

यह मेरा कोड जैसा दिखता है। मैं पहली बार सूचनाएं प्राप्त है, और गम्यता को सुन शुरू करने के लिए की स्थापना:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    // check for internet connection 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(checkNetworkStatus:) 
               name:kReachabilityChangedNotification object:nil]; 

    // Set up Reachability 
    internetReachable = [[Reachability reachabilityForInternetConnection] retain]; 
    [internetReachable startNotifier];  

    .... 

    return YES; 
} 

और फिर, इस समारोह है कि संपर्क में परिवर्तन का जवाब है:

- (void)checkNetworkStatus:(NSNotification *)notice { 
    // called after network status changes 

    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
     case NotReachable: 
     { 
      NSLog(@"The internet is down."); 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"The internet is working via WIFI"); 
      break;    
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"The internet is working via WWAN!"); 
      break;    
     } 
    }  
} 

अधिसूचना भले ही एप्लिकेशन के माध्यम से आ पृष्ठभूमि में है, लेकिन वे उपरोक्त वर्णित वास्तविक दुनिया परीक्षण में नहीं हैं।

किसी भी मदद के लिए धन्यवाद।

+0

क्या आपने 'पहुंच योग्यता के लिएInternetConnection' और' accessabilityForLocalWifi' के संयोजन की कोशिश की है? –

+0

क्या आपको इसके लिए कोई समाधान मिला? मुझे एक ही समस्या का सामना करना पड़ रहा है, और यहां समाधान मदद नहीं करते हैं या जो मैं ढूंढ रहा हूं वह नहीं है। – newenglander

+0

मुझे नहीं पता कि मैंने कभी भी अपनी विशिष्ट समस्या हल की है, क्योंकि मुझे हाल ही में उस परियोजना पर काम करने की आवश्यकता नहीं है। क्या आपने यह सुनिश्चित किया है कि ऐप पृष्ठभूमि पृष्ठभूमि के साथ पृष्ठभूमि में चल रहा है, प्रति @ हर्डन की सिफारिश? –

उत्तर

5

पृष्ठभूमि स्थिति ऐप में डिफ़ॉल्ट रूप से केवल थोड़े समय के लिए रहता है, अधिकांश ऐप्स जल्द ही बाद में निलंबित राज्य में जाते हैं। इसका मतलब है कि ऐप पृष्ठभूमि में है लेकिन कोड निष्पादित नहीं कर रहा है। तो आपकी कस्टम लागू अधिसूचना काम नहीं करती है। वेकअप समय पर NetworkReachability requery अवश्य एप्लिकेशन प्रतिनिधि methodes में:

applicationWillEnterForeground: 
applicationDidBecomeActive 
1

मैं एक वीओआईपी अनुप्रयोग, जो पृष्ठभूमि में शुरू की है जब iPhone बूट, जिस बिंदु पर कोई नेटवर्क गम्यता हो सकता है पर काम कर रहा था (जैसे अगर फोन में पिन कोड के साथ पासकोड और/या सिम कार्ड दोनों हैं)। लेकिन चूंकि ऐप सीधे पृष्ठभूमि में लॉन्च किया गया है, इसलिए प्रतिनिधि विधि applicationDidEnterBackground: नहीं कहा जाता है। इसके बजाय मैंने जो किया था, वह @में सीधे @ हर्डन के विचार का उपयोग किया गया था, यह देखने के लिए कि 0 एप वास्तव में पृष्ठभूमि में शुरू हो रहा था या नहीं, applicationState जांच रहा है। इसने ऐप को अनलॉक करने के बाद kReachabilityChangedNotification अधिसूचना प्राप्त करने में सक्षम किया (संग्रहीत पासवर्ड का उपयोग करके वाईफाई को कनेक्ट करने में सक्षम)।