无法在 OnLocationChanged() 中放置处理程序和可运行对象
unable to place handler and runnable inside OnLocationChanged()
我已经计算出车辆的速度并将该速度与某个阈值进行比较,即 speed<=3 ,现在的问题是计算等待时间。
我正在尝试计算车辆的等待时间,如果汽车停留时间超过两分钟,那么等待超过两分钟后的总时间将被添加到等待时间中。我在 onLocationchanged() 中使用了处理程序和可运行的
但我的时间计算是随机的。不同的处理程序和可运行程序一次 运行 并且时间比定义的快。
@Override
public void onLocationChanged(Location location) {
diaplayViews();
timeGpsUpdate = location.getTime();
float delta = (timeGpsUpdate - timeOld) / 1000;
if (location.getAccuracy() <100) {
distance += locationOld.distanceTo(location);
Log.e("location:", location + "");
speed = (long) (distance / delta);
if(speed<=3)
{
if(runable==null)
{
runnable = new Runnable() {
public void run() {
waitingTime++;
updateHandler.postDelayed(this, 10000); // determines the execution interval waiting time addition on every 10 seconds after 2 minutes initially
}
};}
updateHandler.postDelayed(runnable, 60*2*1000); // acts like the initial delay
}
else {
handler.removeCallbacks(runable);
runable=null;
}
locationOld = location;
timeOld = timeGpsUpdate;
diaplayViews();
}
}
每 10 秒使用 if(location.getspeed()==0.0) 和 运行 处理程序,最初添加两分钟 (2*60),其他时间继续添加该时间,即10 秒,最后除以 60。你会得到
最好的方法是使用将 运行 程序在后台运行的服务,并使用 broadcastreceiver 通知用户或在 UI 中显示结果。
http://developer.android.com/guide/components/services.html
和广播接收器
http://developer.android.com/reference/android/content/BroadcastReceiver.html
我已经计算出车辆的速度并将该速度与某个阈值进行比较,即 speed<=3 ,现在的问题是计算等待时间。 我正在尝试计算车辆的等待时间,如果汽车停留时间超过两分钟,那么等待超过两分钟后的总时间将被添加到等待时间中。我在 onLocationchanged() 中使用了处理程序和可运行的 但我的时间计算是随机的。不同的处理程序和可运行程序一次 运行 并且时间比定义的快。
@Override
public void onLocationChanged(Location location) {
diaplayViews();
timeGpsUpdate = location.getTime();
float delta = (timeGpsUpdate - timeOld) / 1000;
if (location.getAccuracy() <100) {
distance += locationOld.distanceTo(location);
Log.e("location:", location + "");
speed = (long) (distance / delta);
if(speed<=3)
{
if(runable==null)
{
runnable = new Runnable() {
public void run() {
waitingTime++;
updateHandler.postDelayed(this, 10000); // determines the execution interval waiting time addition on every 10 seconds after 2 minutes initially
}
};}
updateHandler.postDelayed(runnable, 60*2*1000); // acts like the initial delay
}
else {
handler.removeCallbacks(runable);
runable=null;
}
locationOld = location;
timeOld = timeGpsUpdate;
diaplayViews();
}
}
每 10 秒使用 if(location.getspeed()==0.0) 和 运行 处理程序,最初添加两分钟 (2*60),其他时间继续添加该时间,即10 秒,最后除以 60。你会得到 最好的方法是使用将 运行 程序在后台运行的服务,并使用 broadcastreceiver 通知用户或在 UI 中显示结果。 http://developer.android.com/guide/components/services.html 和广播接收器 http://developer.android.com/reference/android/content/BroadcastReceiver.html