【FAQ】关于华为地图服务定位存在偏差的原因及解决办法( 二 )

b. 创建LocationCallback , 用于位置更新的回调 。
/** * 定义位置更新回调 */LocationCallback mLocationCallback = new LocationCallback() {    @Override    public void onLocationResult(LocationResult locationResult) {        if (locationResult != null) {            // TODO: 处理位置回调结果            Log.d("LOG_HwMyLocation", "Latitude" + locationResult.getLastHWLocation().getLatitude() +                    " ; Longitude:" + locationResult.getLastHWLocation().getLongitude());        }    }};c. 初始化FusedLocationProviderClient对象,设置定位类型并开启定位 。
private void initLocationClient() {    // 实例化fusedLocationProviderClient对象    fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);    LocationRequest mLocationRequest = new LocationRequest();    // 设置位置更新的间隔(单位:毫秒)    mLocationRequest.setInterval(1000);    // 设置定位类型    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);    // 设置回调次数为1    mLocationRequest.setNumUpdates(10);    //开启定位    fusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())            .addOnSuccessListener(new OnSuccessListener<Void>() {                @Override                public void onSuccess(Void aVoid) {                    // TODO: 接口调用成功的处理                    Log.d("LOG_HwMyLocation", "定位开启成功");                }            })            .addOnFailureListener(new OnFailureListener() {                @Override                public void onFailure(Exception e) {                    // TODO: 接口调用失败的处理                    Log.d("LOG_HwMyLocation", "定位开启失败:"+e.getMessage());                }            });}d. 启动定位获得用户当前所在位置(WGS-84坐标系) , 即可得到如下结果:
e. 创建Marker标记,标记Location的定位位置,可在LocationCallback回调中调用此方法 。
private Marker locationMarker;//添加定位位置标记public void addLocationMarker(double Latitude, double Longitude) {    if (null != locationMarker) {        locationMarker.remove();    }    MarkerOptions options = new MarkerOptions()            .position(new LatLng(Latitude, Longitude))            .title("定位位置")            .snippet("定位所在位置");    locationMarker = this.huaweiMap.addMarker(options);}f. 从下方2图可以看出 , Location定位获取的位置与用户实际所在位置存在较大偏差:

推荐阅读