从什么是指定[4-5块差别],你可能会获得
location来自
networkProvider而已。
使用
gpsTracker问题中提到的这段代码,
需要进行一些修改,而不是照原样使用该代码:
1. 有2个
if循环,用于验证的源
location是否启用以及否’
else‘:
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 if (isGPSEnabled) { if (location == null) { 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(); } } } }这意味着当您
location从两个来源获得时,应用程序将做两倍的工作。此外,
location获得的来源始终是模棱两可的。
当您只需要近似值(
location主要不应该为null)时,这很好。
如果您只想使用此类来获取
location,请尝试
if-else根据要求构造,并确保在获得时不会重复
location。
例如。 如果
GPS优先级较高,则适用于您的情况,将其
if移至上方,然后将网络状况设为
else类似:
if (isGPSEnabled) { if (location == null) { 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(); } } } } else 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(); } } }根据您的要求,我建议删除网络提供商的部件,并
location从GPS中获取唯一的部件,尤其是在视线不成问题的情况下。
当您的代码运行正常时,它必须从GPS获取位置并将其设置在对象中。但是由于有两个“
if”和“
else”
两个,您永远都不知道
location获取的是从网络还是从GPS-
您可以在以下条件下检查location.getProvider()
canGetLocation()
2. 另外,您可以记录消息或对某个特定来源提示某些操作…,例如:
在此部分中:
if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled }只需将其分成两个不同
if的部分并相应地进行编码。到目前为止,这里什么也没有发生,因此除非您从外部进行检查,否则您都不知道两者是否都已禁用。
建议:试着将 它使用GooglePlayServices
LocationClient用于检索当前位置。我发现它更可靠和有用。检查此“
融合的位置提供者”示例,根据您的要求设置LocationRequest对象是关键。



