* *我使用gps坐标来计算使用位置更新的距离。但问题是,如果我站在同一个地方,坐标会发生变化,距离会随着移动到任何地方而改变。我想改变它只有当我移动了10分钟。
## Activity ##
//Activity
public TextView dist;
public double lati1,lati2,longi1,longi2;
private boolean run1 = false;
private Handler handler1 = new Handler();
private Runnable task1 = new Runnable() {
public void run() {
// TODO Auto-generated method stub
if (run1) {
handler1.postDelayed(this,1000);
if(lati1==0.0&&longi1==0.0)
{
lati1=Service1.lat1;
longi1=Service1.lon1;
}
lati2=Service1.lat1;
longi2=Service1.lon1;
double R=63710;
double dLat=Math.toRadians(lati2-lati1);
double dLon=Math.toRadians(longi2-longi1);
double a=Math.sin(dLat/2)*Math.sin(dLat/2)+
Math.cos(Math.toRadians(lati1))*Math.cos(Math.toRadians(lati2))*
Math.sin(dLon/2)*Math.sin(dLon/2);
double c=2*Math.asin(Math.sqrt(a));
double d=R*c;
d=(double)(Math.round(d*100.00))/1000.00;
distance+=d;
String s=String.format("%.2f", distance);
dist.setText(s);
lati1 = lati2;
longi1 = longi2;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dist=(TextView)findViewById(R.id.distancetextView);
Intent i = new Intent(context, Service1.class);
startService(i);
}
## Service ##
//Service
private double new_latitude = 0.0;
private double new_longitude = 0.0;
public static double lat1=0.0,lon1=0.0;
LocationManager locationManager = null;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0.0f, this);
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
locationManager.removeUpdates(this);
super.onDestroy();
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
new_latitude=location.getLatitude();
new_longitude=location.getLongitude();
lat1=new_latitude;
lon1=new_longitude;
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}****
答案 0 :(得分:0)
我应该看到你正在编写的代码。但是如果没有它,我可以说有一个函数,你调用它,它给你每X毫秒的位置更新。或者,您可以再次获取最新的更新位置,我应该看到您的代码。
更新:
更改此行
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0.0f, this);
到
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 10.0f, this);
移动10米后你会收到更新。
第二个参数是以毫秒为单位的时间,第三个参数是最小距离。但这并不意味着您将在请求的时间或请求的距离上准确地进行更新,而是意味着它。
答案 1 :(得分:0)
//在类上初始化的以前速度的公共或类变量。 // float previousSpeed;
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
new_latitude=location.getLatitude();
new_longitude=location.getLongitude();
float speed = location.getSpeed();
//You could also use location.hasSpeed(), which is a boolean, but it almost
//always returns True
if(speed > DESIRED_LIMIT && previousSpeed > DESIRED_LIMIT){
lat1=new_latitude;
lon1=new_longitude;
}
previousSpeed = speed;
}
就是这样的。这种情况没有得到很好的优化或设计。但这就是你如何从位置对象获得GPS速度。您可以调整速度限制或整个条件以获得最佳结果。或者添加更多的速度历史记录。
答案 2 :(得分:-1)
您可以使用Android市场中的位置欺骗应用程序,并指定欺骗位置的持续时间以及距离