这个问题可能会重复,但我对其他人不满意,这就是为什么再次询问.i创建了一个简单的应用程序来显示当前位置并将其显示在地图上。但它不准确。我在建筑物内测试了我的应用程序并取得附近的道路作为我当前的位置,但其他应用程序,如Myteksi,Grab teksi显示我的公司名称作为当前位置及其准确。我不知道为什么它如此。请帮助。获取当前位置的代码在下面给出< / p>
protected void gotoCurrentLocation() {
Location currentLocation = mLocationClient.getLastLocation();
if (currentLocation == null) {
Log.d("currentLocation-->>>", "null");
Toast.makeText(this, "Current location isn't available",
Toast.LENGTH_SHORT).show();
} else {
LatLng ll = new LatLng(currentLocation.getLatitude(),
currentLocation.getLongitude());
Log.d("lattitude", currentLocation.getLatitude()+"");
Log.d("longitude", currentLocation.getLongitude()+"");
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll,
DEFAULTZOOM);
map.animateCamera(update);
/*String address= service.GetAddress(currentLocation.getLatitude(),
currentLocation.getLongitude());
Log.d("address", address);*/
}
}
如果需要任何其他代码,请发表评论。
答案 0 :(得分:1)
正如您所说,您在室内位置中测试应用。而你知道在室内地点GPS传感器将无法工作,根据谷歌的文档:
尽管GPS最准确,但它只适用于室外。
因此,您的位置可能来自使用wi-fi或cell-id的网络提供商,这不够准确。
Android的网络位置提供商使用手机信号塔和Wi-Fi信号确定用户位置,以室内和室外的方式提供位置信息。
你必须知道:(使用getLastLocation()时)
要获取当前位置,请创建位置客户端,将其连接到位置服务,然后调用其getLastLocation()方法。根据您的应用请求的权限和当前启用的位置传感器,返回值是最佳的最新位置。
BUT:
仅在位置客户端连接到位置服务时维护当前位置。假设没有其他应用程序连接到位置服务,如果断开客户端,然后稍后调用getLastLocation(),结果可能已过期。
还请看一下以了解有关维持当前最佳估算的更多信息:
http://developer.android.com/guide/topics/location/strategies.html#BestEstimate
我希望这些信息有所帮助。 ;)
答案 1 :(得分:0)
这是因为获取位置是一项非常复杂的任务。而LocalClient的原生植入可能不是最准确的。
考虑使用设备中的一个或全部13个传感器(Table 1)来改善这一点。
答案 2 :(得分:0)
您可能会收到陈旧的位置数据,因为您正在使用LocationClient.getLastKnownLocation()
,它返回最后一个缓存位置,而不是当前位置。您可以尝试使用LocationListener
请求自己的位置更新。为此,您需要创建自己的LocationListener
并覆盖默认的onLocationChanged(Location)
行为。例如:
final LocationListener ll = new LocationListener(){
int i=0;
@Override
public void onLocationChanged(Location loc) {
if(i < 5 && loc.getAccuracy() > 8){
i ++;
return;
}
double lat = loc.getLatitude();
double lon = loc.getLongitude();
double acc = loc.getAccuracy();
}
};
然后,您需要使用LocationManager
:
final LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
此示例将在GPS位置发生变化时注册侦听器。上面的实际监听器代码等待至少5个位置更改,以帮助确保最终位置准确(等待的时间越长,锁定到卫星的时间越长),然后获取纬度,经度和来自Location
对象的准确性。您可以通过许多其他方式设置您的侦听器,但这就是我在其中一个应用程序中执行此操作的方式。如果你谷歌像“android位置更新”,你应该找到一些其他好的教程。祝好运!