在我的UI中,我正在使用代码
// getting location service
mLocationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
和他们我正在获取位置
location = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
在我的BroadcastReceiver中,我正在获取位置
Bundle bundle = intent.getExtras();
Location location = (Location)bundle.get(android.location.LocationManager.KEY_LOCATION_CHANGED);
我使用这两种方法为相同的位置获得了2种不同的纬度(和经度)。
我做错了吗?
UPDATE !!! 我发现了一些非常有趣的东西。
在我的Nexus 4和Nexus 7上 -
来自UI - LAT = 18.5798001& LONG = 73.7363223,来自广播接收机LAT = 18.5770622& LONG = 73.7389527 2个地点之间的距离是420米
On My MOTO E
来自UI - LAT = 18.5798001& LONG = 73.7363223,来自广播接收机LAT = 18.5771489& LONG = 73.7391201 2个地点之间的距离约为5米
在我的代码中,我根据距离进行了计算。他们在MOTO E上完美运行,但他们在Nexus 4& Nexus 7!
这是否意味着获得纬度和经度取决于设备?怎么可能?我完全糊涂了。
答案 0 :(得分:0)
嘛!我想我破解了它。
问题是我在UI和BroadcastReceiver中访问lats和longs的方式不同。
在用户界面中,由于我必须显示地址,因此我使用Geocoder进行反向地理编码。我使用getFromLocation()方法获取了Address对象,我使用这些对象检索我的lats并且很长时间存储在我的数据存储中(这是错误的!)
在BroadcastReceiver中,我使用了Location对象来获取lats和longs。
Geocoder根据使用getFromLocation()方法中提供的lats和long检索的实际地址来更改lats和longs(因为它搜索所有附近的地址并返回最佳匹配)。因此,Address对象中的lats和long基本上是“最佳猜测”,属于数学地址。
很明显,当我将UI中存储的lats和long与我在BroadcastRececiver中获得的Lats和Longs进行比较时,我遇到了问题。
现在我的应用程序在Moto和Nexus设备上都运行良好。
然而,这仍然没有回答一个问题。 Moto E如何能够几乎准确地解决反向地理编码的问题?!! hmmmm ...!无论如何,问题已经解决了。