我一直在开发基于位置的应用程序。
我正在 Samsung Galaxy S4
和 Samsung Tab 7
上进行测试。
当调用 getBestProvider()
时,如果启用它通常会返回 GPS,否则会返回网络,我的 Galaxy S4 就是这种情况。
但是,当我尝试在选项卡上运行应用程序时,getBestProvider()
从未返回 GPS 提供程序,即使它已启用也是如此。
S4 有 android 4.2.2
而选项卡有 4.1.1
,这可能是问题所在,如果不是,那是什么?
最佳答案
无论您使用哪个提供商的 GPS、NETWORK 或最好的提供商,它们的工作原理都是相同的,即从本地(在设备上)缓存中获取位置。
如果您想要即时获取 GPS,您需要破解系统以更新缓存,然后读取它。在三星手机上需要这个 hack。在 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 不需要您找到最好的提供者,而是在下面做所有这些事情。
关于Android getBestProvider 从不返回 GPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480042/