2012-06-11 83 views
0

我正在開發一個應用程序,需要每2分鐘保存一次設備GPS位置的軌跡。
第一次嘗試是使用requestLocationUpdates每2分鐘進行一次GPS跟蹤(requestLocationUpdates,Timer或Handler)

locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000L, 0f, this); 

爲了測試我使用三星Galaxy迷你(安卓2.3.5)
如果我使用連接的USB電纜在調試模式下進行測試,那麼每隔兩分鐘我就能找到一個完美的位置。
問題是當我拔掉USB並去街上測試。這樣我每秒鐘就可以獲得一個GPS位置。這太多了。
太多的評論我的代碼後,我決定用一個定時器:

new Timer().scheduleAtFixedRate(new TimerTask(){ 
    @Override 
    public void run() { 
     Location loc=getLastBestLocation(Activity.this); 
     GpsStore.save(loc); 
    } 
}, 120000L, 120000L); 

同樣,如果用USB數據線測試在調試模式下的應用程序一切正常。
如果我出去並測試應用程序是否在前臺時一切順利,如果應用程序在後臺,TimerTask不會每2分鐘運行一次,它會停止,並且應用程序返回到前臺時突然運行全部乘以它正常執行的TimerTask。但一切都很快就在1秒左右。

再多的評論我的代碼後,我決定,而不是使用定時器處理:

 final Handler handler = new Handler(); 
     Runnable runnable = new Runnable() { 
      public void run() { 
            Location loc=getLastBestLocation(Activity.this); 
            GpsStore.save(loc); 

       handler.removeCallbacks(this); 
       handler.postDelayed(this,120000L); 
      } 
     }; 
     handler.removeCallbacks(runnable); 
     handler.postDelayed(runnable, 120000L); 

一如既往一切工作在調試模式下罰款USB。當我在街上進行測試時,現在發生的事情是,當應用程序處於前臺時,處理程序不會每隔2分鐘運行一次,有時每隔4秒鐘運行一次,但是應用程序在後臺時按順序運行處理程序不會每2分鐘運行一次,從不運行。

我只會使用requestLocationUpdates,但每秒鐘都會調用它。
我需要你的幫助。謝謝。

回答

0

如果您查看locationManager.requestLocationUpdates的文檔,您會發現minTime參數僅作爲提示。真正的LocationProvider可以比您指定的更早提供更新。我建議您也設置minDistance值。將其設置爲至少100米。

+0

感謝您的回覆。我知道'minTime'是一個提示。這就是爲什麼我試圖使用'Timer'和'Handler'。我需要固定時間間隔的GPS座標。必須始終滿足此間隔。我寫的時間間隔是2分鐘,也許30分鐘,但重要的是間隔時間準確完成。有時可能有效,有時不可能。 – jos1980

+0

我做了類似的事情記錄職位。我只是簡單地使用了AlarmManager,併發送了一個PendingIntent給一個Service組件。無論您的活動是否在前臺,都會發生這種情況。 – jsmith

+0

將此評論作爲答覆。這樣人們會投票(或不投票)爲好答案。關於AlarmManager,謝謝,我會嘗試你說的。 – jos1980