【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", "定位開啟失?。?quot;+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定位獲取的位置與用戶實際所在位置存在較大偏差:

推薦閱讀