栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android GPS查询不正确的位置数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android GPS查询不正确的位置数据

从什么是指定[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对象是关键。




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号