2015-01-05 40 views
15

Xin chào Tôi đã triển khai Api nhà cung cấp Vị trí hợp nhất để nhận cập nhật vị trí trong một dịch vụ. Tôi đã có thể nhận được sự kiện onlocationchanged bắn theo thiết lập khoảng thời gian. Tuy nhiên, khi tôi đặt setmallestDisplacement thành 10 mét, sự kiện sẽ bị kích hoạt ngay cả khi thiết bị vẫn còn. Có ai có vấn đề tương tự như thế này không. vui lòng cung cấp đề xuất. Dưới đây là mã sốVị trí hợp nhất Nhà cung cấp setsmallestDisplacement không hoạt động trong Android

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

Để tìm khoảng cách giữa hai giá trị vị trí tôi đã sử dụng phương pháp này.

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

Nhưng tôi nhận được khoảng cách là 43.51, 49.32, 520.02 ngay cả khi thiết bị vẫn là Still. Có phải vì máy tính bảng đang sử dụng trong nhà?

Trả lời

33

Nếu Displacement được thiết lập cho LocationRequest, không có cơ hội nhận được các địa điểm nếu thiết bị vẫn là Displacement được ưu tiên hơn Khoảng thời gian (interval và fastInterval). Như tôi có thể đoán - Có thể bạn đã vượt qua đối tượng LocationRequest khác nhau (không có bộ chuyển vị trí) đến LocationServices.FusedLocationApi.requestLocationUpdates().

Tôi đang tìm kiếm câu trả lời cho cách nhận được vị trí nếu cả khoảng thời gian và bộ chuyển vị trí. Tôi chỉ xác minh cho bản thân mình với ứng dụng của tôi và dưới đây là hành vi cho cấu hình khác nhau cho LocationRequest:

  1. Không Displacement tham số thiết lập
    setInterval được thiết lập để 1 phút và nhanh nhất để 1 phút.

    Tôi đã nhận được vị trí mỗi một phút. Nhưng bạn thấy đôi khi nó nhận được nhanh chóng và đôi khi chậm hơn đó là setInterval là không chính xác.

06-03 11: 46: 55,408 25.776-25.776/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. tham số Displacement được thiết lập đến 10 mét
    setInterval như trên 1 phút.

    Không nhận được cập nhật vị trí nếu thiết bị không di chuyển hoặc vượt qua khoảng cách đó.Giữa mỗi onLocationChanged dưới đây tôi đi bộ hơn 10 mét vì vậy tôi nhận được loc.

06-03 11: 26: 53.328 16709-16709/MyLocationListener ﹕ onLocationChanged.
ngày 06-ngày 03 tháng 11: 35: 38,318 16.709-16.709/MyLocationListener: onLocationChanged.
ngày 06-ngày 03 tháng 11: 39: 16,728 16.709-16.709/MyLocationListener: onLocationChanged.

+1

có cùng trải nghiệm ..! –

+0

mát @GaganDeep – cgr

+2

Tôi đã dịch chuyển thiết lập ở mức 10, setInterval và setFastestInterval đặt ở 3 phút nhưng ngay cả với ý nghĩa phong trào Tôi không nhận cập nhật vị trí thường xuyên không chắc chắn đâu là vấn đề? – 2cupsOfTech

5

Có thể bạn sẽ nhận được độ dài khác nhau trong phương thức onLocationChanged mô tả dịch chuyển nhiều hơn 10. Vì vậy, vui lòng kiểm tra thời gian dài mà bạn nhận được và đo khoảng cách một lần theo cách thủ công để xác minh chéo mọi thứ.

Ngoài từ trên cao, thêm một lý do có thể là một vấn đề ưu tiên, Nếu trường hợp trên có vẻ tốt đẹp sau đó thử như sau:

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

Tôi đã chỉnh sửa câu hỏi với thêm details.Please đi qua nó một lần. Cũng thay đổi mức độ ưu tiên của các câu lệnh như bạn đã nói vẫn là kết quả giống nhau. –

+0

Có, độ chính xác không quan trọng. Bạn có thể kiểm tra độ chính xác của vị trí mà bạn nhận được trong phương pháp 'onLocationChanged'. 10m là khoảng cách rất nhỏ để theo dõi. và nói chung chúng tôi nhận được độ chính xác 30m hầu hết thời gian. –

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