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



我在应用程序中遇到了一个关于纬度和经度的问题。我的代码如下:-

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通知一次又一次地出现。这让我很恼火。我希望一旦位置发生更改,上述方法将只执行一次并且在再次移动设备后执行。这是我的要求。伙计们请帮我解决这个问题。提前感谢!!

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

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

另一个建议是避免像这样的请求

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

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

编辑:

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

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

你现在每分钟每公里都会得到更新。因为在没有minDistance的情况下无法请求更新,所以只需将其设置得足够高即可。

您可以使用共享的首选项更新当前位置,并使用location.danceTo(loc)将当前位置与sharedPrefs进行比较。

最新更新