我正在嘗試製作一個Android應用程序,它在特定時間間隔內獲取位置數據,例如: - 5秒,1分鐘等。這裏是我的代碼: -以一定的時間間隔在Android設備上獲取位置數據
public void onLocationChanged(Location loc) {
// TODO Auto-generated method stub
if(loc!=null)
{
//Required Interval
tInterval =(minInterval*60*1000) + (secInterval)*1000 - 1000;
//The app also supports interval mode
RadioButton sel = (RadioButton) findViewById(mode.getCheckedRadioButtonId());
//Code for Manual Functionality
if(sel.getText().equals(MANUAL_RADIO))
{
Time t = new Time();
t.setToNow();
db.addLocationAtTime(loc, t);
Toast.makeText(getApplicationContext(), "Location Added to Database",Toast.LENGTH_SHORT).show();
locate.removeUpdates(this);
b.setText(MANUAL_BUTTON);
d.setEnabled(true);
}
//Code for Interval functionality
else if(sel.getText().equals(INTERVAL_RADIO))
{
//count is object of Countdown class which is a Thread object
if(count == null)
{
//t is a Time object
t.setToNow();
//SQLiteDatabase object for logging Location with Time
db.addLocationAtTime(loc, t);
Toast.makeText(getApplicationContext(), "Location Added to Database",Toast.LENGTH_SHORT).show();
count = new CountDown(tInterval);
count.start();
}
else if(count.getState().toString().equals("TERMINATED"))
{
t.setToNow();
db.addLocationAtTime(loc, t);
Toast.makeText(getApplicationContext(), "Location Added to Database",Toast.LENGTH_SHORT).show();
count = new CountDown(tInterval);
count.start();
}
}
}
}
下面是倒計時類的代碼: - 這個類是用來間隔添加到應用程序
public class CountDown extends Thread
{
long time;
public CountDown(long duration)
{
time = duration;
}
public void run()
{
long t1 = System.currentTimeMillis();
long t2 = 0;
do
{
t2 = System.currentTimeMillis();
}while(t2 - t1 < time);
}
}
的問題是,使用上面的代碼我沒有得到準確的時間間隔。我總是得到1秒額外的(因爲我在公式中減去1000),但是這1秒並不總是發生。那麼誰能告訴我我做錯了什麼?
我只使用GPS提供商,因爲可能沒有正確的網絡覆蓋範圍,它將被使用,其次我需要在使用過程中使用GPS定位,並在requestLocationUpdates()中設置minTime,直到時間已經過去了。 –
你也可以使用「LocationManager.GPS_PROVIDER」 –
我使用過,我需要GPS修復保持ON,因此我將minTime設置爲0,並使用Countdown類添加了一個時間間隔,但我得到了1秒的差異我減去1000,但這種差異並不是每次都發生,因爲我以非均勻間隔獲取位置。 –