我的手机没有移动,但全球定位系统的lat/long值不断变化,这就是为什么?
如何解决这个问题?如何使用以下代码获取移动...Am的可靠lat长值以获取GPS位置:
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (isGPSEnabled) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}发布于 2015-08-21 13:47:24
造成这种情况的原因有很多,而且可能是--根本不是问题--。
有时只是你的GPS能更好地修复你的位置,或者可能是定位提供者改变了。
P.S.:精度不太好,所以你的位置可能会不时变化。正如您在此链接上看到的那样。你可以从6个不同的来源得到你的位置,每一个都有不同的精度。
大多数仙女座都有能力存储最新的GPS定位。这通常在应用程序第一次启动时使用,您可以检索时间戳、纬度、经度和准确性。
样本代码:
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);样本代码:
locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);这是从GPS上流出来的原始信息。当GPS第一次打开时,它不会立即返回任何信息,它必须首先进行基本的热身。热身时间因设备而异,如果您在建筑物内,通常需要一分钟或更长时间。稍后再谈这个问题。根据您的供应商允许您可以访问时间戳,纬度,经度,高度,方位,速度,准确性和旅行距离。
样本代码:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,time,distance,listener);这是由蜂窝运营商(如美国AT&T )返回的原始网络位置提供商信息。不同的运营商使用不同的信息来确定位置,如WiFi数据、全球定位系统信息、附近的蜂窝塔等。根据您的载波允许的内容,您可以访问时间戳、纬度、经度、高度、精度和旅行距离。
样本代码:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,time,distance,listener);此选项只意味着应用程序在处于最小化状态时可以侦听位置更新。这样做是为了节省电池的电量,这样你的应用程序提供商就不会在应用程序最小化的情况下全速运行。那将是巨大的电池消耗。被动位置可以侦听另一个应用程序请求位置更新。您可以访问时间戳,纬度,经度,高度和准确性。据我所知,您将无法确定该信息是从哪个提供者派生的。
样本代码:
<receiver android:name=".PassiveLocationChangedReceiver" android:enabled="true"/>虽然它不是人类可读的,但是您可以访问原始的NMEA字符串。通常,这些字符串用于编程访问,只对开发人员或工程师有意义。这些数据经常用于海事应用程序。这些数据只有在全球定位系统升温后才能获得。
资料来源:这一信息是从这里获取的。
此外,在获取位置时有一些非常常见的错误来源,从android文档中可以看到:
从移动设备获取用户位置可能很复杂。位置读取(不管源)包含错误和不准确的原因有几个。用户位置的一些错误来源包括:
全球定位系统( GPS )、手机识别码(Cell)和无线网络(Wi)都可以为用户的定位提供线索。确定使用和信任哪个是在准确性、速度和电池效率方面的权衡问题。
由于用户位置发生变化,您必须经常通过重新估计用户位置来说明移动情况。
来自每个位置源的位置估计在精度上不一致。10秒前从一个源获得的位置可能比来自另一个或同一源的最新位置更准确。
请花点时间阅读谷歌的http://developer.android.com/guide/topics/location/strategies.html文档。
有关LocationManager 这里的更多信息。
https://stackoverflow.com/questions/32141787
复制相似问题