我已经使用了下面的代码,一切正常,但是即使我坐在同一个位置,也会调用onLocationChanged。
我认为只有当我向右移动时才应该调用它?
我只想在移动一定距离后获取位置。
请帮帮我。 提前谢谢。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
this);
}
@Override
public void onLocationChanged(Location location) {
Toast.makeText(this, "Working!", Toast.LENGTH_SHORT).show();
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
String Text = "Latitud = " + lat + "\nLongitud = " +
lng;
Toast.makeText(getBaseContext(),Text,Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:7)
您要以最短的间隔/距离请求位置更新
locationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
this);
这是文档中关于这些参数的说明
“可以使用minTime参数控制位置更新间隔。位置更新之间经过的时间永远不会小于minTime,尽管它可能更多取决于位置提供程序实现和其他应用程序请求的更新间隔。”
minDistance参数还可用于控制位置更新的频率。如果它大于0,那么位置提供程序将仅在位置至少改变minDistance米时向您的应用程序发送更新,并且至少已经过了minTime毫秒。但是,位置提供商使用minDistance参数更难以节省功耗,因此minTime应该是节省电池寿命的主要工具。
我个人使用10秒和10米的minTime用于我的应用
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000,
10, locationListener);
答案 1 :(得分:4)
网络位置并不像您想象的那么精确。因此,传感器返回的结果可能会波动。如果您认为如果您没有与卫星直接视线的GPS信号会减弱,并且可见卫星的数量也会对精度产生影响,则情况会更加真实。当您开始使用网络提供商时,这会变得更糟,其中位置是通过对蜂窝塔的信号强度进行三角测量以及可见无线网络的数量和SSID来计算的。由于这些可能会波动很多,因此精度会受到很大影响。有许多平均算法,并采用启发式方法来最小化这种波动,但最终没有任何东西能够使它稳定下来,以达到预期的效果。
简单的平均和变异过滤可以帮助您。基于设备加速度计添加校正也可以提供很多帮助,但它会使您的代码更复杂。