2011-12-28 29 views
5
public void onCreate() { 
locationListener = new GeoUpdateHandler(); 
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

try { 
    gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
} catch (Exception ex) { 
} 

if(gps_enabled) { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 100, locationListener); 
} else if(network_enabled) { // Checking for GSM 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, DISTANCE, locationListener); 
} 
} 
public class GeoUpdateHandler implements LocationListener { 
private void getPresentLocation(Location location) { 
    ... 
      //Fetch the locations 
      ... 
} 

@Override 
public void onProviderDisabled(String provider) { } 

@Override 
public void onProviderEnabled(String provider) { } 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { } 

@Override 
public void onLocationChanged(Location location) { 
    getPresentLocation(location); 
} 
} 

đây là đoạn mã của tôi và vấn đề của tôi là khi ứng dụng được cài đặt với GPS được BẬT, thì nó không chuyển sang GSM để tìm vị trí khi chúng tôi TẮT GPS , và ngược lại.Chuyển đổi giữa nhà cung cấp gps và mạng theo tính sẵn có

Vì vậy, hãy cho tôi biết cách chuyển đổi hiệu quả giữa GPS và GSM tùy theo tính khả dụng của nhà cung cấp vị trí.

LƯU Ý: Ứng dụng của tôi là dịch vụ.

Cảm ơn.

Chỉnh sửa: Tôi có một BroadcastReceiver, đó là lý do tại sao tôi giả sử onCreate() sẽ được gọi khi bật/tắt GPS xảy ra.

Tôi cũng đã thử kiểm tra tính khả dụng của nhà cung cấp trong onLocationChanged (Vị trí vị trí). Nhưng nó không giúp được gì.

EDIT: Tôi sửa đổi của tôi onProviderDisabled & onProviderEnabled như thế này, Xin vui lòng cho những gì tôi đang làm sai ở đây ..

public void onProviderDisabled(String provider) { 
     locationManager.removeUpdates(locationListener); 
     if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);    
     } else { 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener); 
     } 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     locationManager.removeUpdates(locationListener); 
     if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) { 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener); 
     } else { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener); 
     } 

    } 
+0

có ở đây tôi đã tìm thấy một vấn đề khác, onProviderEnabled() của tôi không được gọi. – Lenin

Trả lời

5

Got một giải pháp cho việc này:

public void onProviderDisabled(String provider) { 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
    } else { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
    } 
} 

@Override 
public void onProviderEnabled(String provider) { 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
    } else { 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
    } 
} 

những gì tôi bỏ lỡ là locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE); trong onProviderEnabled() và onProviderDisabled().

Cảm ơn

0

Hình như bạn chỉ yêu cầu cập nhật vị trí trong onCreate() phương pháp. Khi các nhà cung cấp thay đổi, bạn phải yêu cầu cập nhật từ nhà cung cấp mới, phải không?

Dưới đây là một bài đăng trên Android blog về địa điểm, nó bao gồm cung cấp dịch vụ giám sát thay đổi quá:

http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

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