2013-06-25 12 views
8

मुझे बस उपयोगकर्ता का स्थान प्राप्त करने की आवश्यकता है। पसंदीदा रूप से बिल्कुल सही स्थान, लेकिन यदि यह संभव नहीं है, तो एक मोटा स्थान ठीक होगा।स्थान प्रबंधक और स्थान क्लाइंट उपयोगकर्ता स्थान प्राप्त करने के लिए एक साथ

डॉक्स के अनुसार:

LocationClient.getLastLocation()

Returns the best most recent location currently available.

और

LocationManager.getLastKnownLocation(String)

Returns a Location indicating the data from the last known location fix obtained from the given provider.

अगर मेरी समझ सही है, तो पूर्व मुझे एक बहुत अच्छा परिणाम देगा (या कभी-कभी शून्य) जबकि बाद वाला मुझे एक परिणाम देगा जो शायद ही कभी शून्य होगा।

यह मेरा कोड (सरलीकृत) है

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationClient = new LocationClient(this, this, this); 

@Override 
public void onConnected(Bundle dataBundle) { 
    setUserLocation(); 
} 

private void setUserLocation() { 
    myLocation = locationClient.getLastLocation(); 

    if (myLocation == null) { 
     myLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(new Criteria(), false)); 
     if (myLocation == null) { 
      //I give up, just set the map somewhere and warn the user. 
      myLocation = new Location(""); 
      myLocation.setLatitude(-22.624152); 
      myLocation.setLongitude(-44.385624); 
      Toast.makeText(this, R.string.location_not_found, Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     isMyLocationOK = true; 
    } 
} 

यह काम कर रहा है, लेकिन मेरे सवाल कर रहे हैं:

  1. getLastLocation और getLastKnownLocation सही की मेरी समझ है?
  2. क्या यह एक अच्छा दृष्टिकोण है?
  3. क्या मुझे एक ही गतिविधि में दोनों का उपयोग करने में परेशानी हो सकती है?

धन्यवाद

उत्तर

7

LocationClient.getLastLocation() केवल null लौटाता है यदि एक स्थान ठीक निर्धारित करने के लिए असंभव है। getLastLocation()getLastKnownLocation() से अधिक है, और आमतौर पर बहुत बेहतर है। मुझे नहीं लगता कि यह getLastKnownLocation() पर "वापस गिरना" लायक है जैसा आप करते हैं।

आप दोनों का उपयोग करके परेशानी नहीं हो सकती है, लेकिन यह अधिक है।

बेशक, आपको याद रखना होगा कि LocationClientGoogle Play Services का हिस्सा है, इसलिए यह केवल उन डिवाइसों पर उपलब्ध है जिनके प्लेटफ़ॉर्म में Google Play Store शामिल है। कुछ डिवाइस एंड्रॉइड के गैर-मानक संस्करण का उपयोग कर रहे हैं, और आपके पास LocationClient तक पहुंच नहीं होगी।

Google Play सेवाओं के लिए दस्तावेज़ अधिक विस्तार से चर्चा करता है।

+0

जानना अच्छा है! मेरे पास पहले से ही Google Play की उपलब्धता को संभालने के लिए कोड है (वास्तव में ऐप सिर्फ इसके बिना काम नहीं कर सकता है)। सबसे पहले मैंने केवल स्थान सेवा का उपयोग किया लेकिन कई बार मुझे इससे अजीब परिणाम मिल गए। स्थान क्लाइंट पर स्विच करने से मुझे बहुत बेहतर परिणाम मिले, लेकिन कई मामलों में नल परिणाम भी जिन्हें मैं पुन: पेश नहीं कर सका। मैंने सोचा था कि एंड्रॉइड सिस्टम किसी स्थान पर अंतिम ज्ञात स्थान रिकॉर्ड कर सकता है जो केवल स्थान सेवा वर्ग के लिए सुलभ होगा, इसलिए ऊपर मेरा कोड। यदि यह सत्य नहीं है, तो केवल स्थान क्लाइंट पर भरोसा करना बेहतर है, है ना? – Androiderson

+0

[आधिकारिक डेवलपर वेब] के इस [प्रवाह] (http://developer.android.com/images/location/getting-location.png) देखें (http://developer.android.com/guide/topics/ स्थान/strategies.html) – Aiapaec

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