2013-06-25 23 views
8

Tôi chỉ cần nhận vị trí của người dùng. Tốt hơn là vị trí chính xác, nhưng nếu không thể, vị trí thô sẽ ổn.LocationManager và LocationClient cùng nhau để có được vị trí người dùng

Theo các tài liệu:

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.

Nếu sự hiểu biết của tôi là đúng, người trước đây sẽ cho tôi một kết quả rất tốt (hoặc đôi khi vô giá trị) trong khi người thứ hai sẽ cho tôi một kết quả hiếm khi là vô giá trị.

này được mã của tôi (giản thể)

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; 
    } 
} 

Nó dường như được làm việc nhưng câu hỏi của tôi là:

  1. là sự hiểu biết của tôi về getLastLocationgetLastKnownLocation có đúng không?
  2. Đây có phải là cách tiếp cận tốt không?
  3. Tôi có gặp rắc rối khi sử dụng cả hai trong cùng một hoạt động?

Cảm ơn

Trả lời

7

LocationClient.getLastLocation() chỉ trả null nếu một vị trí cố định là không thể xác định. getLastLocation() không có số tồi tệ hơn hơn getLastKnownLocation() và thường tốt hơn nhiều. Tôi không nghĩ rằng nó có giá trị "rơi trở lại" để getLastKnownLocation() như bạn làm.

Bạn không thể gặp rắc rối khi sử dụng cả hai, nhưng nó quá mức cần thiết.

Tất nhiên, bạn phải nhớ rằng LocationClient là một phần của Dịch vụ của Google Play, vì vậy nó chỉ khả dụng trên các thiết bị có nền tảng bao gồm Cửa hàng Google Play. Một số thiết bị có thể đang sử dụng phiên bản Android không chuẩn và bạn sẽ không có quyền truy cập vào LocationClient.

Tài liệu dành cho Dịch vụ của Google Play sẽ thảo luận chi tiết hơn về điều này.

+0

Điều cần biết! Tôi đã có mã để xử lý sự sẵn có của Google Play (trên thực tế có thể ứng dụng chỉ không làm việc mà không có nó). Lúc đầu, tôi chỉ sử dụng LocationServices nhưng nhiều lần tôi có kết quả lạ từ nó. Chuyển sang LocationClient đã cho tôi kết quả tốt hơn nhiều, nhưng cũng có kết quả null trong nhiều trường hợp mà tôi không thể tái tạo. Tôi nghĩ rằng hệ thống Android có thể ghi lại vị trí được biết cuối cùng ở một số nơi mà chỉ có thể truy cập được vào lớp LocationService, do đó mã của tôi ở trên. Nếu điều đó không đúng, thì tốt hơn là chỉ dựa vào LocationClient, đúng không? – Androiderson

+0

Xem [flow] này (http://developer.android.com/images/location/getting-location.png) của [trang web chính thức dành cho nhà phát triển.] (Http://developer.android.com/guide/topics/ location/strateg.html) – Aiapaec

Các vấn đề liên quan