2015-01-05 21 views
15

में काम नहीं करता है हाय मैंने सेवा में स्थान अपडेट प्राप्त करने के लिए फ़्यूज्ड लोकेशन प्रदाता एपीआई लागू किया है। मैं अंतराल सेट के अनुसार निकाल दिया गया onlocationchanged घटना प्राप्त करने में सक्षम था। हालांकि जब मैं सेटमेलस्ट डिस्प्लेसमेंट को 10 मीटर तक सेट करता हूं, तब भी डिवाइस को निकाल दिया जाता है, भले ही डिवाइस अभी भी हो। क्या किसी को भी इस तरह की समस्या है। कृपया सुझाव प्रदान करें। नीचे कोडफ़्यूज्ड स्थान प्रदाता सेटमेलस्ट डिस्प्लेसमेंट एंड्रॉइड

mlocationrequest = LocationRequest.create(); 
    mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mlocationrequest.setInterval(60000); // Update location every 1 minute 
    mlocationrequest.setFastestInterval(10000); 
    mlocationrequest.setSmallestDisplacement(10); 


    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mlocationrequest, this); 

दो स्थान मानों के बीच की दूरी को खोजने के लिए मैंने इस विधि का उपयोग किया है।

public static float distFrom (float lat1, float lng1, float lat2, float lng2) 
{ 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(lat2-lat1); 
    double dLng = Math.toRadians(lng2-lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
    Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double dist = earthRadius * c; 

    int meterConversion = 1609; 

    return new Float(dist * meterConversion).floatValue(); 
} 

लेकिन डिवाइस अभी भी होने पर भी मुझे 43.51, 49.32, 520.02 के रूप में दूरी मिलती है। क्या ऐसा इसलिए है क्योंकि टैबलेट इनडोर में उपयोग कर रहा है?

उत्तर

33

विस्थापन LocationRequest के लिए सेट है, तो स्थानों यदि होने का कोई मौका नहीं उपकरण अभी भी विस्थापन अंतराल (अंतराल और सबसे तेज़ अंतराल) पर प्राथमिकता लेता है। जैसा कि मैं अनुमान लगा सकता हूं - हो सकता है कि आपने स्थान सेवा के लिए अलग-अलग स्थान रिक्वेस्ट ऑब्जेक्ट (बिना विस्थापन सेट के) पास किया हो। FusedLocationApi.requestLocationUpdates()।

मैं अंतराल और विस्थापन सेट दोनों के स्थान पर कैसे प्राप्त किया जाता है, इसका जवाब ढूंढ रहा था। मैं बस अपना आवेदन के साथ खुद के लिए सत्यापित और नीचे LocationRequest के लिए अलग अलग विन्यास के लिए व्यवहार है:

  1. कोई विस्थापन पैरामीटर 1 मिनट के लिए सेट
    setInterval 1 मिनट के लिए निर्धारित है और सबसे तेजी से।

    मुझे हर एक मिनट स्थान मिला। लेकिन आप कभी-कभी इसे तेजी से प्राप्त करते हैं और कभी-कभी धीमे होते हैं जो सेट किया जाता है अंतराल अचूक है।

06-03 11: 46: 55.408 25776-25776/MyLocationListener: onLocationChanged।
06-03 11: 47: 56.008 25776-25776/MyLocationListener: onLocationChanged।
06-03 11: 48: 18.768 25776-25776/MyLocationListener: onLocationChanged।
06-03 11: 49: 22.938 25776-25776/MyLocationListener: onLocationChanged।
06-03 11: 50: 22.948 25776-25776/MyLocationListener: onLocationChanged।
06-03 11: 52: 22.978 25776-25776/MyLocationListener: onLocationChanged।
06-03 11: 53: 22.998 25776-25776/MyLocationListener: onLocationChanged।

    1 मिनट से ऊपर के रूप में
  1. विस्थापन पैरामीटर 10 मीटर की दूरी पर सेट है
    setInterval।

    डिवाइस स्थानांतरित नहीं होने या उस दूरी को पार करने पर कोई स्थान अपडेट प्राप्त नहीं होता है।प्रत्येक ऑनलाक्शन के बीच नीचे नीचे चला गया मैं 10 मीटर से अधिक चला गया तो मुझे स्थानीय मिला।

06-03 11: 26: 53.328 16709-16709/MyLocationListener: onLocationChanged।
06-03 11: 35: 38.318 1670 9-1670 9/MyLocationListener: onLocationChanged।
06-03 11: 39: 16.728 1670 9-1670 9/MyLocationListener: onLocationChanged।

+1

वही अनुभव किया ..! –

+0

कूल @ गगनडिप – cgr

+2

मेरे पास विस्थापन सेट 10 है, सेट इंटरवल और सेटफास्टेस्ट इंटरवल सेट 3 मिनट पर सेट है, फिर भी महत्वपूर्ण आंदोलन के साथ मुझे नियमित स्थान अपडेट प्राप्त नहीं होते हैं, यह सुनिश्चित नहीं है कि समस्या कहां है? – 2cupsOfTech

5

ऐसा हो सकता है कि आप onLocationChanged विधि में अलग-अलग लैट-लांग प्राप्त कर रहे हैं जो 10 से अधिक विस्थापन का वर्णन करता है। इसलिए कृपया जो लेट-लांग आप प्राप्त कर रहे हैं उसे चेकआउट करें और मैन्युअल रूप से चीजों को पार करने के लिए दूरी को मापें।

ऊपर से

अलावा, एक और संभावित कारण प्राथमिकता की बात है, उपरोक्त मामले ठीक लग रहा है, तो निम्नलिखित की तरह का प्रयास करें:

mlocationrequest = LocationRequest.create(); 
mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
mlocationrequest.setSmallestDisplacement(10); 
mlocationrequest.setInterval(60000); // Update location every 1 minute 
mlocationrequest.setFastestInterval(10000); 
+0

मैंने आगे के विवरण के साथ प्रश्न संपादित किया है। कृपया इसे एक बार देखें। बयान की प्राथमिकता को भी बदल दिया जैसा आपने कहा था कि परिणाम अभी भी वही है। –

+0

हां, सटीकता मायने रखती है। आप उस स्थान की सटीकता की जांच कर सकते हैं जो आपको 'ऑनलाक्शन चेंज' विधि में मिलता है। ट्रैक करने के लिए 10 मीटर बहुत छोटी दूरी है। और आम तौर पर हमें 30 मीटर की सटीकता मिलती है। –

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