【问题标题】:Error removing location huawei kit android studio删除位置 huawei kit android studio 时出错
【发布时间】:2020-09-26 04:34:11
【问题描述】:

我正在关注关于片段内定位工具包的教程-> tutorial

一切都很好,我唯一改变的是我在方法location_initialize()中调用方法removeLocationUpdatesWithCallback()。第一次删除该位置,但当我更改片段并返回时,removeLocationUpdatesWithCallback() 不起作用,我收到失败消息:

10804 no_matched_callback

这是我的代码:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
    settingsClient = LocationServices.getSettingsClient(getActivity());
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(500);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    location_initialize();
    requestLocationUpdatesWithCallback();   
}


private void location_initialize(){
    if (null == mLocationCallback) {
        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                img_user = Constants.img_url+Constants.GetLbd(getActivity(), "img_user");
                if (locationResult != null) {
                    List<Location> locations = locationResult.getLocations();
                    if (!locations.isEmpty()) {
                        for (Location location : locations) {
                            usr_posicion = location;
                            CiudadCercana(location);
                        }
                    }
                }
                todasSucursales_func();
                removeLocationUpdatesWithCallback();
            }
            @Override
            public void onLocationAvailability(LocationAvailability locationAvailability) {
                if (locationAvailability != null) {
                    Toast.makeText(getActivity(), "Geolocalización no disponible por el momento", Toast.LENGTH_SHORT).show();
                }
            }
        };
    }
}

public void requestLocationUpdatesWithCallback() {
    try {
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
        builder.addLocationRequest(mLocationRequest);
        LocationSettingsRequest locationSettingsRequest = builder.build();
        // check devices settings before request location updates.
        settingsClient.checkLocationSettings(locationSettingsRequest)
                .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                    @Override
                    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                        //check location settings success
                        //request location updates
                        fusedLocationProviderClient
                                .requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())
                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        //"requestLocationUpdatesWithCallback onSuccess"
                                    }
                                })
                                .addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(Exception e) {
                                        //"requestLocationUpdatesWithCallback onFailure:"
                                    }
                                });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        //"checkLocationSetting onFailure:"
                        int statusCode = ((ApiException) e).getStatusCode();
                        switch (statusCode) {
                            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                try {
                                    ResolvableApiException rae = (ResolvableApiException) e;
                                    rae.startResolutionForResult(getActivity(), 0);
                                } catch (IntentSender.SendIntentException sie) {
                                    //"PendingIntent unable to execute request."
                                }
                                break;
                        }
                    }
                });
    } catch (Exception e) {
        //"requestLocationUpdatesWithCallback exception:"
    }
}

private void removeLocationUpdatesWithCallback() {
    try {
        fusedLocationProviderClient.removeLocationUpdates(mLocationCallback)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Toast.makeText(getActivity(), "removeLocationUpdatesWithCallback onSuccess", Toast.LENGTH_SHORT).show();
                        //"removeLocationUpdatesWithCallback onSuccess"
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        ->>>>>>HERE IS MY ERROR<<<<<--
                        Toast.makeText(getActivity(), "removeLocationUpdatesWithCallback onFailure:" + e.getMessage(), Toast.LENGTH_SHORT).show();
                        //"removeLocationUpdatesWithCallback onFailure:" + e.getMessage()
                    }
                });
    } catch (Exception e) {
        Toast.makeText(getActivity(), "removeLocationUpdatesWithCallback exception:" + e.getMessage(), Toast.LENGTH_SHORT).show();
        //"removeLocationUpdatesWithCallback exception:" + e.getMessage()
    }
}

我该如何解决,只有removeLocationUpdatesWithCallback() 方法失败:(

【问题讨论】:

    标签: java android huawei-mobile-services huawei-developers huawei-location-kit


    【解决方案1】:

    要解决此问题,请删除该行

            removeLocationUpdatesWithCallback();
    

    从方法

                      private void location_initialize(){
    

    并调用函数 removeLocationUpdatesWithCallback()

    在其他地方,例如视图组件的 onClick 或 Activity 或 Fragment 的 onDestroy()。

    【讨论】:

      【解决方案2】:
      1. 请检查设备位置设置。 Location Kit 的定位功能取决于设备的定位设置。例如,如果设备上的定位功能被禁用,您的应用将无法获取设备位置。因此,建议您的应用在不断获取设备位置之前,先检查设备设置是否满足位置要求。 Location Kit 提供检查设备位置设置的功能。您的应用可以使用LocationServicesgetSettingsClient(Activity activity) 获取SettingsClient 实例,并调用checkLocationSettings(LocationSettingsRequest locationSettingsRequest) API 获取设备位置设置。如果位置设置不符合要求,您的应用可以提示用户授予相关权限。位置权限必须授予 HMS Core (APK)。在 Android Q 中,对于 HMS Core (APK),Location 必须设置为 Always

      2. NO_MATCHED_CALLBACK的描述是没有匹配的回调。请验证是否已将正确的回调传递给参数列表。

      有关详细信息,请参阅docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        相关资源
        最近更新 更多