我在申请中遇到有关纬度和经度的问题。 我的代码如下: -
LocationManager locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Toast.makeText(
CheckInSOSMessageService.this,
"Location has been Changed now.....................", 0)
.show();
isLocationChanged=true;
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
};
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locationListener);
在上面的代码中,一切正常。当位置发生变化时, onLocationChanged 方法会执行。但我的问题是,当我将设备从一个地方移动到另一个地方时,位置会发生变化并且吐司通知似乎在设备上,但 onLocationChanged 方法执行多次连续,即使我的设备现在处于空闲位置,因此再次出现Toast通知我觉得很烦恼。我希望一旦位置改变,上述方法只会执行一次,再次移动设备后会执行。是我的要求。请帮助我解决这个问题。谢谢你提前!!
答案 0 :(得分:0)
即使您的手机始终处于相同位置,该位置也会发生变化并触发onLocationChanged。那是因为GPS信号是跳跃的,因为f.e.反映建筑物上的信号。您将永远不会在适度的时间间隔内获得完全相同的位置。
为避免您临时保存位置并将其与新位置进行比较。如果它们之间的距离达到定义的边界,则使用新位置。
另一个建议是避免像
这样的请求locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locationListener);
因为这会产生很多垃圾邮件并且非常耗费资源。尝试一些适合您的方法的不同minTime和minDistance值。然后每隔0ms就不会触发onLocationChanged。
编辑:
如果您希望每分钟更新一次位置,请使用此类请求。
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 1000, 1000, locationListener);
您现在每分钟都会获得一次更新。因为没有minDistance就无法请求更新,所以只需将其设置得足够高。
答案 1 :(得分:0)
您可以使用共享首选项更新当前位置,并在获得显着距离运行逻辑后,使用location.distanceTo(loc)比较sharedPrefs中的当前位置。