GoogleMaps API v2 setMyLocationEnabled与LocationManager不同

时间:2016-04-13 14:11:02

标签: android google-maps location

我可能有一个简单的问题,但我无法弄清楚,出了什么问题。

当我使用地图上的按钮设置我的位置时,位置几乎是100。

当我使用位置管理器获取我的位置时,我的位置错误大约10-20米。

以下是代码:

@Override
public void onMapReady(final GoogleMap googleMap) {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    mGoogleMap = googleMap;
    mGoogleMap.setMyLocationEnabled(true);


    Button setLoc = (Button) findViewById(R.id.setLoc);

    assert setLoc != null;
    setLoc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            mGoogleMap.clear();
            LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            Criteria criteria = new Criteria();
            Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));

            latLng = new LatLng(location.getLatitude(), location.getLongitude());

            Toast.makeText(MainActivity.this, String.valueOf(latLng), Toast.LENGTH_LONG).show();
            //zoom to current position:
            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(17));
            mGoogleMap.addMarker(new MarkerOptions().position(latLng).title("Your location").anchor(0.0f, 1.0f));

        }
    });

}

我做错了什么?蓝点不在我的标记所在的位置,蓝点具有更好的精度,如上所述。 谢谢!

小更新 当我在模拟器上运行代码时,它几乎是相同的位置...嗯,在真实设备上它是不同的。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我认为它可能取决于设备。您需要将优先级更改为PRIORITY_HIGH_ACCURACY。在请求位置更新之前,您的应用必须连接到位置服务并发出位置请求。在位置请求到位后,您可以通过调用requestLocationUpdates()来启动定期更新。在Google API客户端提供的onConnected()回调中执行此操作,该回调在客户端准备就绪时调用。

使用LocationListener回调更新位置。调用requestLocationUpdates(),将其传递给您的GoogleApiClient实例,LocationRequest对象和LocationListener。定义从startLocationUpdates()回调调用的onConnected()方法。

@Override
public void onConnected(Bundle connectionHint) {
...
if (mRequestingLocationUpdates) {
startLocationUpdates();
}
}

protected void startLocationUpdates() {
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
}