1

我一直在开发基于位置的应用程序。

我正在测试Samsung Galaxy S4两者Samsung Tab 7

打电话时getBestProvider()它时,如果启用它通常会返回 GPS,否则会返回网络,我的 Galaxy S4 就是这种情况。

但是,当我尝试在选项卡上运行应用程序时,GPS 提供程序从未返回getBestProvider()即使启用了 GPS 提供程序,也从未返回过它。

S4 有 android4.2.2而 tab 有4.1.1,这可能是问题,如果不是,是什么?

4

2 回答 2

2

无论您使用哪个提供商 GPS、NETWORK 或最好的,都遵循从本地(在设备上)缓存中获取位置的相同原则。

如果您想立即使用 GPS,您需要破解系统以更新缓存然后读取它。在三星手机上,这个黑客是必需的。在 HTC 和其他型号上,您不需要此 hack。我(幸运的是)找到了通过 hack 触发缓存更新的方法。

只需在 getLastKnownLocation 之前调用以下代码。

<YourActivity>.getLocationManager().requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
            @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(final Location location) {
    }
});

或者

使用 LocationClient。用于位置更新的新 API(刚刚推出)。这些 API 不需要你找到最好的提供者,而是在下面做所有这些事情。

于 2013-07-05T03:21:22.533 回答
1

getBestProvider() 不会总是返回 GPS。因为 GPS 并不总是最好的提供者。标签是否连接到wifi?来自 wifi 的位置非常准确,因此如果您连接到 wifi,则可能会返回。

此外,您应该切换到新的位置服务,它是 Google Play 服务的一部分。使用保险丝位置提供程序将消除管理提供程序的所有麻烦,并为您提供最佳结果。

于 2013-07-05T02:09:15.737 回答