我一直致力于基于位置的应用。
我正在Samsung Galaxy S4
和Samsung Tab 7
进行测试。
当呼叫getBestProvider()
时,如果启用它通常会返回GPS,否则会返回网络,而我的Galaxy S4就是这种情况。
但是,当我尝试在标签页上运行应用程序时,getBestProvider()
即使启用了GPS提供程序也从未返回过。
S4有android 4.2.2
,而标签有4.1.1
,这可能是问题,如果不是,那是什么?
答案 0 :(得分:2)
无论您使用GPS,NETWORK或哪种提供商,所有提供的工作都基于从本地(设备上)缓存获取位置的相同原则。
如果你想立即获得GPS,你需要破解系统来更新缓存,然后阅读它。在三星手机上需要这种黑客攻击。在HTC和其他型号上你不需要这个黑客。 我(幸运的是)找到了用黑客触发缓存更新的方法。
只需在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) {
}
});
OR
使用LocationClient。用于位置更新的新API(仅用于)。这些API不需要你找到最好的提供者,而是在下面做所有这些。
答案 1 :(得分:1)
getBestProvider()不会总是返回GPS。因为GPS并不总是最好的供应商。标签是否连接到wifi?来自wifi的位置非常准确,因此如果您连接到wifi,可能会返回。
此外,您应切换到属于Google Play服务的新位置服务。使用保险丝位置提供商将消除管理提供商的所有麻烦,并为您提供最佳结果。