2012-11-12 78 views
0

我正在做一個應用程序,我想檢查互聯網上的一些信息,但我只想這樣做,如果設備已移動X米。 例如,如果用戶移動了300米,請撥打服務器電話,如果沒有,則不做任何操作。但我想我無法啓動一個服務,一直在監聽gps座標並計算距離,因爲電池會耗盡。知道設備是否移動並註冊GPS協調

而我的問題是:有什麼辦法可以讓Android啓動服務o發送廣播警告我說gps座標已經改變了X米?

目前我有一個AlarmManager,每30分鐘獲得gps座標,但我需要更準確。

回答

1

使用LocationManager.requestLocationUpdates();方法;您可以指定更新應發送的最短時間(以秒爲單位),以及更新前的最小數量。

應該是這個樣子:

//以毫秒爲單位
私人最終詮釋MINIMUM_TIME_BETWEEN_UPDATES = 5000;

//以米爲單位
private final int MINIMUM_DISTANCE_BETWEEN_UPDATES = 1;

LocationManager lManager =(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 
LocationListener = listener = new LocationListener() { 

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

      public void onProviderEnabled(String provider) { 
      } 


      public void onProviderDisabled(String provider) { 
      } 

      public void onLocationChanged(Location location) { 
      } 

     }; 

lManager.requestLocationUpdates(bestProvider, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_BETWEEN_UPDATES, listener); 

這產生與指定的位置提供(GPS或網絡),幾秒鐘內指定量和米指定量的LocationManager。 locationmanager將更新發送到`LocationListener。無論何時收到更新,onLocationChanged都會被調用。 bestProvider變量可以通過使用LocationManager.getBestProvider();和Criteria類。

+0

感謝您的回答,我在MINIMUM_DISTANCE_BETWEEN_UPDATES上傳遞了0值,我認爲您的解決方案應該是可行的。 – Pipeline

相關問題