0

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

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方法在位置发生变化时执行。但我的问题是,当我将设备从一个地方移动到另一个地方时,位置发生变化并且 toast 通知出现在设备上,但onLocationChanged方法执行连续几次,即使我的设备现在处于空闲位置,由于 toast 通知一次又一次地出现。这让我很恼火。我希望一旦位置发生变化,上述方法将只执行一次,然后再次移动设备后它会执行。这是我的要求。请大家帮我解决这个问题。在此先感谢!

4

2 回答 2

0

您可以使用共享首选项来更新当前位置,并在运行逻辑后使用 location.distanceTo(loc) 从 sharedPrefs 比较当前位置。

于 2013-08-20T12:41:21.893 回答
0

即使您的手机一直在同一个位置,位置也会发生变化并触发 onLocationChanged。那是因为 GPS 信号是跳跃的,因为信号在建筑物上的反射。您永远不会在适度的时间间隔内获得完全相同的位置。

为避免这种情况,您可以暂时保存该位置并将其与新位置进行比较。如果它们之间的距离达到定义的边界,则使用新位置。

另一个建议是避免像

locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locationListener);

因为这会产生大量垃圾邮件并且非常耗费资源。尝试一些适合您方法的不同 minTime 和 minDistance 值。那么onLocationChanged不会每0ms触发一次。

编辑:

如果您想每分钟更新一次位置,请使用这样的请求。

locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 1000, 1000, locationListener);

您现在每分钟每公里都会得到更新。因为没有 minDistance 就无法请求更新,只需将其设置得足够高即可。

于 2013-08-20T12:20:17.790 回答