2011-08-26 121 views
0

我正在嘗試製作一個應用程序,該程序會每x分鐘將您的gps位置發送到網絡服務器。我很困惑我應該如何做到這一點。我是否使用計時器或其他服務每x分鐘調用get gps函數?如何在後臺每隔30分鐘獲取gps位置

這是我使用來獲取GPS信號

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
       Criteria criteria = new Criteria(); 
       criteria.setAccuracy(Criteria.ACCURACY_FINE); 
       String bestProvider = locationManager.getBestProvider(criteria, 
         false); 
       LocationListener loc_listener = new LocationListener() { 

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

        } 

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

        } 

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

        } 

        @Override 
        public void onLocationChanged(Location location) { 
         // TODO Auto-generated method stub 

        } 
       }; 
       try { 
        Looper.prepare(); 
        locationManager.requestLocationUpdates(bestProvider, 0, 0, 
          loc_listener); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       Location location = locationManager 
         .getLastKnownLocation(bestProvider); 

回答

2

一個alarm是完美的。您可以讓您的應用程序請求系統每30分鐘(每次手動或使用setRepeating()方法)手動設置警報。無論您的應用程序是否正在運行,此警報都會關閉。您需要一個廣播接收器來處理它生成的意圖。有關於報警here的很好的教程。

+0

我有一個稱爲更新位置的函數。它實際上是一個異步任務,我使用updateLocation()。execute();我應該在我的第一個活動的oncreate方法中設置一個警報,並從那裏調用updateLocation()。execute()?因爲這個例子討論了開始一個新的活動 – Sean

1

你應該註冊到AlarmManger開始你的IntentService將得到的位置並將其發送到服務器。

在服務執行結束時,將當前時間設置爲30分鐘的新警報。

+0

如果我在我的啓動頁面中開始報警,並且它會從當前時間調用30分鐘,如果關閉該應用並再次打開啓動頁面,會發生什麼情況?定時器重新啓動還是現在有兩個鬧鐘? – Sean