2013-01-17 38 views
8

A LocationSource được xác định trong Google Maps Android API v2.API Google Maps Android v2 tạo một LocationSource mới

Nó được sử dụng cho googlemap làm nhà cung cấp vị trí. Theo mặc định, nguồn vị trí được cung cấp bởi mô-đun gps trên điện thoại.

Nhưng bây giờ tôi muốn sử dụng một Location source khác, dữ liệu vị trí sẽ được gửi đến thiết bị Android theo định kỳ.

Tôi không biết cách triển khai giao diện này. Có ví dụ nào không? Bất cứ ai có thể giúp tôi với nó? Tài liệu không nói gì về nó.

Trả lời

4

Có ví dụ nào không?

Không có nhiều giao diện và triển khai của nó rất phụ thuộc vào ứng dụng của bạn.

This sample project cài đặt giao diện LocationSource về các hoạt động chính:

@Override 
    public void activate(OnLocationChangedListener listener) { 
    this.mapLocationListener=listener; 
    } 

    @Override 
    public void deactivate() { 
    this.mapLocationListener=null; 
    } 

Tất cả tôi làm là giữ được sự OnLocationChangedListener rằng chúng ta đang trao trong activate(). Sau đó, khi bạn có sửa chữa vị trí mà bạn muốn nạp vào bản đồ, hãy gọi số onLocationChanged() trên trình nghe đó, cung cấp đối tượng Location (cùng một đối tượng Location bạn có thể lấy lại từ LocationManager).

12

Dưới đây là triển khai đơn giản của giao diện LocationSource. Trong trường hợp của tôi, tôi đăng ký cả nhà cung cấp vị trí GPS và Mạng. Như đã đề cập bởi @CommonsWare, việc triển khai có thể rất phụ thuộc vào nhu cầu của bạn. Tôi sẽ khuyên bạn nên đọc official documentation về dịch vụ Location để hiểu rõ hơn về cách sử dụng nhu cầu của bạn và tiết kiệm một số năng lượng pin

public class CurrentLocationProvider implements LocationSource, LocationListener 
{ 
    private OnLocationChangedListener listener; 
    private LocationManager locationManager; 

    public CurrentLocationProvider(Context context) 
    { 
     locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    } 

    @Override 
    public void activate(OnLocationChangedListener listener) 
    { 
     this.listener = listener; 
     LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER); 
     if(gpsProvider != null) 
     { 
      locationManager.requestLocationUpdates(gpsProvider.getName(), 0, 10, this); 
     } 

     LocationProvider networkProvider = locationManager.getProvider(LocationManager.NETWORK_PROVIDER);; 
     if(networkProvider != null) { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000 * 60 * 5, 0, this); 
     } 
    } 

    @Override 
    public void deactivate() 
    { 
     locationManager.removeUpdates(this); 
    } 

    @Override 
    public void onLocationChanged(Location location) 
    { 
     if(listener != null) 
     { 
      listener.onLocationChanged(location); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) 
    { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) 
    { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) 
    { 
     // TODO Auto-generated method stub 

    } 
} 

Và đây là cách mà tôi sẽ sử dụng lớp này:

protected void setUpMap() { 
    //init routine 
    ....... 

    this.map.setLocationSource(new CurrentLocationProvider(this)); 
    .......  
} 

EDIT Xin vui lòng không phải là giải pháp này là lỗi thời! Bạn cần phải sử dụng FusedLocationProviderApi kết hợp với GoogleApiClient để theo dõi vị trí hiện tại

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