2012-10-17 13 views
5

से समन्वय मिलता है मैं एक ऐप्लिकेशन मैं कहाँ का पालन करते हुए उपयोगकर्ता के स्थान ट्रैक करने की जरूरत को लागू कर रहा हूँ:एक सटीक didExitRegion

  • ट्रैक उपयोगकर्ता के स्थान एप्लिकेशन पृष्ठभूमि में है या बंद कर दिया
  • यदि उपयोगकर्ता के लगभग 2000 मीटर के लिए स्थान बदल दिया गया है मुझे एक एपीआई कॉल करना चाहिए। ,

    • पहली बार उपयोगकर्ता एप्लिकेशन मैं एक क्षेत्र के लिए निगरानी शुरू अपने वर्तमान स्थान
    • अगर didExitRegion शुरू हो रहा है का उपयोग कर की शुरूआत:

    इस समस्या के लिए मेरे दृष्टिकोण पीछा कर रहा है मैं एपीआई कॉल करता हूं और मौजूदा क्षेत्र का उपयोग नए क्षेत्र के केंद्र के रूप में वर्तमान स्थान का उपयोग कर एक नए क्षेत्र द्वारा प्रतिस्थापित करता हूं।

यह ठीक काम करता है जब ऐप अग्रभूमि में होता है क्योंकि स्थान प्रबंधक से लौटाया गया स्थान सटीक होता है।

लेकिन यदि ऐप पृष्ठभूमि में है तो स्थान प्रबंधक पहली बार चलने के बाद से एक सटीक स्थान वापस नहीं करेगा और लौटाए गए पहले निर्देशांक सटीक नहीं हैं।

सवाल यह है कि उपयोगकर्ता के सटीक स्थान को कैसे प्राप्त किया जा सकता है जब didExitRegion पृष्ठभूमि में ट्रिगर किया गया है?

धन्यवाद

+0

वर्तमान समन्वय को अद्यतन करने और उन लोगों का उपयोग करने के लिए स्थान प्रबंधक से अनुरोध करने के बारे में क्या? – ilmiacs

+0

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

+0

संभावित रूप से सिस्टम वांछित परिवर्तन करता है जब ऐप्स पृष्ठभूमि पर जाते हैं? – ilmiacs

उत्तर

3

मैं didExitRegion: मज़बूती से फायरिंग के साथ अच्छे भाग्य की भी नहीं पड़ा है; यह अक्सर मेरे क्षेत्र के किनारे से कहीं ज्यादा दूर चला जाता है।

मेरा सुझाव है कि आप CLLocationManager के -startMonitoringSignificantLocationChanges का उपयोग करें, अगर आपको केवल 2 किमी या उससे अधिक एपीआई कॉल की आवश्यकता है। यदि आपकी सटीकता/परिशुद्धता महत्वपूर्ण है, तो बस अपनी ऐप प्लिस्ट में आवश्यक पृष्ठभूमि स्थिति (UIBackgroundModes) के रूप में स्थान सेवाएं पंजीकृत करें; आपको पृष्ठभूमि से महत्वपूर्ण परिवर्तन API का भी उपयोग करने के लिए ऐसा करने की आवश्यकता हो सकती है), और सामान्य -startUpdatingLocation का उपयोग करें उपयुक्त distanceFilter और desiredAccuracy फ़ील्ड मान आपके CLLocationManager उदाहरण पर।

+0

-startMonitoringSignificantLocationChanges सटीक नहीं है और कभी-कभी यह हर 8 किमी को आग लगती है। वर्तमान में मैं आपके द्वारा बताए गए दूसरे तरीके का उपयोग कर रहा हूं लेकिन यह बैटरी को इतना खराब कर देता है। – Kassem

0

कई चीजें यहां हो रही हैं।

आपने बताया कि क्षेत्र परिवर्तन ट्रिगर एक छोटा चर है। यह जानबूझकर है; जब आप दो क्षेत्रों के बीच की सीमा पर चलते हैं तो ट्रिगर्स की बड़ी संख्या से बचने के लिए, समय और स्थिति दोनों में ट्रिगरिंग के लिए कुछ चिपचिपापन होता है।

प्रलेखन (http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1)

The system does not report boundary crossings until the boundary plus a designated cushion distance is exceeded. You specify the desired cushion distance for a region when you register it using the startMonitoringForRegion:desiredAccuracy: method. This cushion value prevents the system from generating numerous entered and exited events in quick succession while the user is traveling close the edge of the boundary. 

सटीक स्थिति को प्राप्त करने से सामान्य से अलग नहीं है। आप स्थान प्रबंधक को प्रारंभ करते हैं और वांछित सटीकता के साथ स्थान अपडेट प्राप्त होने तक प्रतीक्षा करें। प्रबंधक को बंद करें और स्थिति का उपयोग करें।

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

उम्मीद है कि मदद करता है।

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