通过纬度和经度更改位置的问题

时间:2013-08-20 12:12:33

标签: android location

我在申请中遇到有关纬度和经度的问题。 我的代码如下: -

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通知我觉得很烦恼。我希望一旦位置改变,上述方法只会执行一次,再次移动设备后会执行。是我的要求。请帮助我解决这个问题。谢谢你提前!!

2 个答案:

答案 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中的当前位置。