重新启动后Android位置Wifi不工作

重新启动后Android位置Wifi不工作,android,location,Android,Location,我正在使用此代码获取位置提供程序和位置 mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); mBestProvider = mLocationManager.getBestProvider(criteria, false); mLocation = mLocationM

我正在使用此代码获取位置提供程序和位置

        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        mBestProvider = mLocationManager.getBestProvider(criteria, false);
        mLocation = mLocationManager.getLastKnownLocation(mBestProvider);

如果我关闭GPS,位置是通过网络确定的,但是如果我重新启动手机(因此我丢失了最后一个已知位置),并且3G数据连接关闭。所以我只使用WIFI,我无法获得任何提供商,因此无法获得任何位置。不过谷歌的places应用程序可以找到我。我想它可能会得到最后一个KnownLocation。但在这种情况下,我的其他应用程序应该能够获得该位置。知道发生了什么吗?

您调用此函数的方式将返回所有已启用或未启用的提供程序,因为您将其传递为false,这可能是您的意图,但您是否检查了返回字符串

mBestProvider = mLocationManager.getBestProvider(criteria, false);
你可能会得到gps提供商,或者你可能会得到网络提供商,我已经学会了不信任标准机制,因为它在每个运营商和设备上的工作方式似乎不同(因此我报告了一些奇怪的错误)

所以我总是特别询问gps和网络提供商,并检查最近已知的两者,然后使用algo来确定最佳使用方法

网络提供商可以使用手机或wifi热点/路由器来确定位置(谷歌保留了一个wifi信息数据库),因此只需wifi就可以得到修复,不是说这是正在发生的事情,而是可能发生的事情

如果这没有结果,那么可能只是在首选项中缓存最后一次位置更新,有些应用程序会这样做。为了测试这篇论文,如果上述所有测试都失败,只需将手机保持在那种状态,并尽可能移动到具有相同属性的非常不同的位置,应该只需要2000米左右。如果你的应用程序仍然报告为空,而places报告的是旧位置,那么你就有了答案


如果places确实使用wifi报告了较新的位置,而你的应用程序无法报告(假设你确实验证了你获得了网络提供商),那么他们有可能通过谷歌位置服务器(GLS)/MASF服务器通过部分手机/wifi信息使用私有API,但这是锡箔曲线的最末端

我添加了一个条件来设置网络提供程序,以防条件机制不返回任何内容,并且当我使用mLocation=mLocationManager.getLastKnownLocation(mBestProvider)时,我没有得到任何结果。所以我找不到任何职位。我会做你说的测试,因为我想他们可能会存储在位置中。GPS/网络/被动提供商都不会返回任何东西。我做了一个测试:禁用WIFI并从places应用程序中删除缓存/应用程序数据。当我再次打开places时,它会显示“需要数据连接”,我再次打开WIFI,然后以50米的精度显示位置。这是否意味着他们正在使用第二个“秘密”API?因为打开WIFI并手动设置NewWork\u提供商时,我一无所获。@dayerman您是否确实尝试过与网络提供商设置位置侦听器等?getLastLocation可以返回null,但仍然会向注册的侦听器报告位置更新,这可能是因为它们只是在获取实际更新。如果你不这么做,我想这是一个其他事情正在发生的迹象,但我会先检查一下。很好!没关系,但当应用程序启动时,监听器不会执行,但如果我关闭并打开Wifi,那么我就得到了一个位置。获得解决方案有什么帮助吗?因此,如果应用程序只启动Wifi,但启用了Wifi,那么监听器不会启动,所以我在Wifi关闭且ONlong MINTIME=10000之前不会得到位置;浮心距离=10;我等了60秒,什么也没发生