我正在尝试制作一个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,但这种差异并不是每次都发生,因为我以非均匀间隔获取位置。 –