2013-03-14 62 views
1

空返回这是代码我用它来获取当前位置:getLastKnownLocation()即使有最好的供应商

mgr = (LocationManager) getSystemService(LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 
best = mgr.getBestProvider(criteria, true); 
if (best == null) { 
    //ask user to enable atleast one of the Location Providers 
} else { 
    Location location = mgr.getLastKnownLocation(best); 
//But sometimes it returns null 
} 

几乎每次best = network

但它不提供位置有时。

mgr.getLastKnownLocation(best) returns null 

另外:

onResume() { 
    mgr.requestLocationUpdates(best, 15000, 10, this); 
} 

onPause() { 
    mgr.removeUpdates(this); 
} 

是否有这样的情况下,任何替代?

一种选择可能是

List<String> providers = mgr.getAllProviders(); 

存储所有的供应商和1走1,但从来没有看到这个推荐的任何地方。此外,要求最好的提供商是文档的建议。

+1

“但它不是提供位置somethimes” - 好像什么都没有使用该供应商最近尝试,它不会给你一个位置。您可能希望阅读文档:http://developer.android.com/guide/topics/location/strategies.html – CommonsWare 2013-03-14 12:51:21

+0

'如果最近没有尝试过使用该提供程序' - 第一次使用提供程序的方式。不使用'getLastKnownLocation(provider)'? – 2013-03-14 12:55:26

+0

报价,我联系到的文档:“获取在Android的用户位置通过回调来运作表明您希望收到来自的LocationManager位置更新通过调用requestLocationUpdates()(”定位管理“),它传递一个LocationListener的“。 – CommonsWare 2013-03-14 12:56:00

回答

7

getLastKnownLocation()只有当供应商最近已被使用返回一个位置对象的提供者。如果它最近还没有出现,那么Android会假定该提供程序提供的最后一个位置是过时的并且是错误的,并且返回null。

在这种情况下,你将不得不等待您的LocationListener的的onLocationChanged()方法被调用你有一个可用的位置之前。

+0

何时调用'onLocationChanged()'。因为如果它依赖于设备移动,无论我尝试多少次,它总是会返回'null',除非用户移动? – 2013-03-14 13:12:53

+0

每当有一个位置与最后一个已知位置不同时应该调用它。因此,在这种情况下,因为您为此获得null,所以在提供程序获取初始修复程序时,应至少调用onLocationChanged()一次。这可以从几秒到几分钟。 – 2013-03-14 13:16:45

+0

好的。 1最后一个问题。我目前正在测试的设备从未离开过这个城市。这些天,它给了正确的当前位置。但是,昨天它给出了一个与我不同的经纬度。这是距我目前的位置1200公里的地方。任何想法可能导致它? – 2013-03-14 18:25:09