2010-01-02 9 views
5

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

मेरा सवाल यह है कि जीपीएस लोकेशन प्रदाता LocationManager अनुरोध स्थान अपडेट से आने वाले प्रत्येक आवधिक अनुरोध के लिए सक्रिय कैसे रहें। क्या किसी को भी यह करना आता है?

उत्तर

7

ऐसा कुछ करने का प्रयास करें। मुझे लगता है कि यह सही दृष्टिकोण है

private void createGpsListner() 
{ 
    gpsListener = new LocationListener(){ 
     public void onLocationChanged(Location location) 
     { 
      curLocation = location; 

      // check if locations has accuracy data 
      if(curLocation.hasAccuracy()) 
      { 
       // Accuracy is in rage of 20 meters, stop listening we have a fix 
       if(curLocation.getAccuracy() < 20) 
       { 
        stopGpsListner(); 
       } 
      } 
     } 
     public void onProviderDisabled(String provider){} 
     public void onProviderEnabled(String provider){} 
     public void onStatusChanged(String provider, int status, Bundle extras){} 
    }; 
} 

private void startGpsListener() 
{ 

    if(myLocationManager != null) 
     // hit location update in intervals of 5sec and after 10meters offset 
     myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, gpsListener); 
} 

private void stopGpsListner() 
{ 
    if(myLocationManager != null) 
     myLocationManager.removeUpdates(gpsListener); 
} 
+1

धन्यवाद। है अकसरता और getAccuracy ने मेरी मदद की। लेकिन एक संदेह है, अगर जीपीएस में 20 के भीतर सटीकता नहीं है (कुछ जगह हो सकती है) तो यह खोज को बनाए रखेगी? क्या करना हे ?? – SSS

0

यदि आप अपना स्थान लिस्टर सक्रिय रखते हैं, तो फिक्स सटीकता को अस्वीकार करते समय इसे स्थान परिवर्तन() पर अपडेट प्राप्त करना जारी रखना चाहिए। और वास्तव में location.getAccuracy() आपको वर्तमान सटीकता बताएगा

शायद अधिक आवृत्ति के साथ अपडेट प्राप्त करने के लिए दोनों मिनट और मिनीडिस्टेंस सेट कर सकते हैं? अधिक बैटरी का उपयोग करेंगे, लेकिन अधिक सटीक है।

+1

मैं कर रहा हूँ के लिए milliseconds में समय निर्दिष्ट विधि के लंबित इन्टेंट संस्करण के साथ एक प्रसारण रिसीवर का उपयोग करना। इसके अलावा, फिक्स सटीकता बेहतर हो जाती है, लेकिन यह इसकी सटीकता क्षमता से पहले अच्छी तरह से अद्यतन करना बंद कर देती है, इसलिए मैं केवल getAccuracy() का उपयोग नहीं कर सकता। मुझे तब तक अपडेट करना जारी रखना चाहिए जब तक सटीकता बेहतर न हो जाए, और यह काफी देर तक इंतजार नहीं कर रहा है। – Doughy

+0

मैं निकटता चेतावनी का उपयोग नहीं कर रहा हूं। मैं अनुरोध कर रहा हूं कि स्थान प्रबंधक मुझे आवधिक सुधार देता है जो एक प्रसारण रिसीवर के माध्यम से मेरे आवेदन पर वापस आ जाता है, जो हर बार स्थान "परिवर्तन" होता है। स्थान प्रबंधक या जीपीएस स्थान प्रदाता स्थानों के लिए बहुत सटीक होने के लिए पर्याप्त लंबे समय तक सक्रिय नहीं रहते हैं। यहां तक ​​कि अगर मैं श्रोता का उपयोग करता हूं, तो यह तथ्य नहीं बदलता कि जीपीएस बहुत लंबे समय तक सक्रिय नहीं रहता है। – Doughy

+0

क्या आपने मिनीटाइम को 0 या इसी तरह के सेट करने के jspcal के सुझाव की कोशिश की है? यदि यह आपको लगातार अपडेट देता है जो जल्द ही पर्याप्त सटीक हो जाता है (या एक टाइमआउट के बाद) तो आप अपने स्थान प्रबंधक अपडेट को वांछित मिनीटाइम मान पर वापस अपडेट कर सकते हैं। कोड के लिए –

0

जीपीएस स्थान समय-समय पर पाने के लिए, से स्थान मिलlocationListener की विधि onLocationChanged और में onResume विधि आवधिक अद्यतन हो रही

onResume 
location_manager.requestLocationUpdates(provider, 1000, 1, MainActivity.this);