2016-12-02 11 views
10

पर उपयोगकर्ता स्थान का पालन करें मैं अपने ऐप पर प्रतिक्रिया-मूल के लिए airbnb's map का उपयोग कर रहा हूं। यह सवाल एंड्रॉइड ऐप के लिए है क्योंकि मुझे अभी तक आईओएस ऐप के आसपास नहीं मिला है।रिएक्ट नेटिव एयरबिन के मैप व्यू [एंड्रॉइड]

मेरे समस्या:

navigator.geolocation एमुलेटर पर ठीक काम करता है, लेकिन बहुत लंबा यह कभी कभी समय समाप्त पुराने उपकरणों पर बात करने के लिए, वास्तविक उपकरणों पर ले जाता है।

मैं क्या देखा है: showsUserLocation प्रोप सही पर सेट है

अगर, मैं getCurrentPosition हल करने से पहले नक्शा रास्ते पर मूल "मौजूदा स्थिति" मार्कर देख सकते हैं।

मुझे क्या करना चाहते हैं:

  1. मैं चाहता हूँ मेरे क्षेत्र हमेशा उपयोगकर्ता के स्थान पर केंद्रित किया जाना है।
  2. मैं मूल भौगोलिक स्थान एपीआई तक पहुंचने का कोई तरीका चाहता हूं ( तेज होना चाहिए?), या शायद कोई मुझे बताए कि मैं क्या गलत कर रहा हूं। नीचे एक कोड नमूना है।
  3. मैं अभी भी स्थान सेवाओं को चालू/बंद करने के बाद भी उपयोगकर्ता के स्थान का पता लगाने में सक्षम होना चाहता हूं। यह showsUserLocation प्रोप का व्यवहार है, लेकिन ऐसा लगता है कि एक बार घड़ी पोस्ट त्रुटियां, यह पूरी तरह से बंद हो जाती है।

यहाँ मैं अब तक राशि है, यह के रूप में यह बहुत सरल है:

componentDidMount() { 
    navigator.geolocation.getCurrentPosition(
     (position) => { 
     console.log("getCurrentPosition Success"); 
     this.setState({ 
      region: { 
      ...this.state.region, 
      latitude: position.coords.latitude, 
      longitude: position.coords.longitude, 
      } 
     }); 
     this.props.resetNotifications(); 
     this.watchPosition(); 
     }, 
     (error) => { 
     this.props.displayError("Error dectecting your location"); 
     alert(JSON.stringify(error)) 
     }, 
     {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000} 
    ); 
    } 

    watchPosition() { 
    this.watchID = navigator.geolocation.watchPosition(
     (position) => { 
     console.log("watchPosition Success"); 
     if(this.props.followUser){ 
      this.map.animateToRegion(this.newRegion(position.coords.latitude, position.coords.longitude)); 
     } 
     }, 
     (error) => { 
     this.props.displayError("Error dectecting your location"); 
     }, 
     {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000} 
    ); 
    } 
+0

के लिए देशी भौगोलिक स्थान का पर्दाफाश करते हैं, आपको अपने स्थान परीक्षण के लिए अपने डिवाइस या घर से बाहर जाना चाहिए। वास्तविक उपकरणों में 'सक्षम उच्च अधिकार: सत्य 'होना चाहिए। यह मेरे लिए सही काम करता है। –

+0

इसे इस प्रश्न की जांच करें http://stackoverflow.com/a/38125402/2955679 –

+0

@pedropeixoto मैंने इंस्टॉलेशन गाइड में जो कुछ भी पूछा है, वही किया है, लेकिन शोउसरलोकेशन मेरे लिए काम नहीं करता है। क्या तुम मेरी मदद कर सकते हो।? – HelpingHand

उत्तर

4

मैं हमेशा पाया है watchPosition विभिन्न ब्राउज़रों के बीच iffy, एक चीज जो मेरे लिए पहले काम करती है getCurrentPosition के साथ setInterval के अंदर प्रतिस्थापित करने के लिए है ताकि उसे हर कुछ सेकंड में स्थान मिलेगा, और यदि यह एक बार फिर से विफल हो जाता है y अगली अंतराल, watchPosition के विपरीत जो कोई त्रुटि उत्पन्न होने पर देखना बंद कर देता है।

आम तौर पर ब्राउज़र भौगोलिक-स्थान बहुत विश्वसनीय नहीं है, आप कुछ मुद्दों https://github.com/facebook/react-native/issues/7495

एक अन्य विकल्प जो निश्चित रूप से तेजी से हो जाएगा और हो सकता है और अधिक विश्वसनीय देशी जियोलोकेशन एपीआई का उपयोग करने के लिए है इस सूत्र देख सकते हैं। इस प्रश्न को उन पुस्तकालयों के लिए जांचें जो देशी मूल React-native Android geolocation

+1

आपके द्वारा भेजे गए लिंक पर पचाने के लिए बहुत कुछ है, लेकिन यह मुझे निश्चित रूप से आगे बढ़ेगा। बक्षीस खत्म होने वाला है इसलिए मैं इसे आपको पुरस्कार दूंगा। धन्यवाद! – pedropeixoto

+1

धन्यवाद। नीचे की रेखा अधिक विश्वसनीयता के लिए एक देशी भौगोलिक स्थान प्लगइन का उपयोग करना है। सौभाग्य – Gaafar

0

सुनिश्चित नहीं हैं कि अगर यह आपकी समस्या का समाधान लेकिन कोशिश यह होगी:

navigator.geolocation.getCurrentPosition(
    (position) => { 
    console.log("getCurrentPosition Success"); 
    this.setState({ 
     region: { 
     ...this.state.region, 
     latitude: position.coords.latitude, 
     longitude: position.coords.longitude, 
     } 
    },() => { 
     this.props.resetNotifications(); 
     this.watchPosition(); 
    }); 
    }, 
संबंधित मुद्दे