我正在使用此代码获取位置提供商和位置。
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
mBestProvider = mLocationManager.getBestProvider(criteria, false);
mLocation = mLocationManager.getLastKnownLocation(mBestProvider);
如果我关闭GPS,位置是通过网络,但如果我重新启动手机(因此我丢失了已知的最后位置)并关闭了3G数据连接。所以我只使用WIFI,因此无法获得任何提供商,因此任何位置。但谷歌地方的应用程序可以找到我。我认为它可能会获得lastknownlocation.But在这种情况下我的其他应用程序应该能够获得该位置。有什么想法发生了吗?
答案 0 :(得分:3)
你调用它的方式将返回所有提供者启用或不启用,因为你传递的是假,这可能是你的意图,但你检查了返回字符串?
mBestProvider = mLocationManager.getBestProvider(criteria, false);
您可能正在获取gps提供程序,或者您可能正在获取网络提供程序,我已经学会了不相信标准机制,因为它似乎对于运营商和设备有不同的工作方式(因为这个我报告了一些奇怪的错误) )
因此,我总是专门询问 gps和网络提供商,并检查两者的最后知道,然后使用算法确定最佳使用。
网络提供商可以使用单元或 wifi热点/路由器来确定位置(谷歌保存wifi信息数据库)所以可以通过wifi获得修复,而不是说发生了什么事但它可能是。
如果它没有结果,那么它们可能只是缓存首选项中的最后一个位置更新,一些应用程序会这样做。为了测试论文,如果没有上述所有内容,只需将手机置于该状态,并尽可能移动到具有相同属性的非常不同的位置,应该只需要2000米左右。如果您的应用仍然报告为空,并将旧报告位置报告您的答案。
如果地方确实使用wifi报告了较新的位置,并且您的应用无法(假设您确实确认自己正在接收网络提供商),那么他们有可能通过Google位置服务器(GLS)/ MASF使用私有API服务器通过部分单元/ wifi信息,但它位于锡箔曲线的最末端。