Ошибка удаления местоположения huawei kit android studio

#java #android #huawei-mobile-services #huawei-developers #huawei-location-kit

#java #Android #huawei-мобильные сервисы #huawei-разработчики #huawei-location-kit

Вопрос:

Я следую этому руководству о наборе местоположений внутри фрагмента -> учебное пособие

Все хорошо, единственное, что я меняю, это то, что я вызываю метод removeLocationUpdatesWithCallback() внутри метода location_initialize() . В первый раз местоположение удаляется, но когда я меняю фрагмент и возвращаю 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() метод терпит неудачу: (

Ответ №1:

Чтобы решить эту проблему, пожалуйста, удалите строку

         removeLocationUpdatesWithCallback();
  

из метода

                   private void location_initialize(){
  

И вызовите функцию
removeLocationUpdatesWithCallback()

в другом месте, таком как onClick компонента представления или onDestroy() действия или фрагмента.

Ответ №2:

  1. Пожалуйста, проверьте настройки местоположения устройства. Функция определения местоположения набора местоположений зависит от настроек местоположения устройства. Например, если функция определения местоположения на устройстве отключена, ваше приложение не сможет получить местоположение устройства. Поэтому рекомендуется, чтобы ваше приложение проверяло, соответствуют ли настройки устройства требованиям к местоположению, прежде чем постоянно получать местоположение устройства. Location Kit предоставляет функцию проверки настроек местоположения устройства. Ваше приложение может получить экземпляр SettingsClient с помощью getSettingsClient(Activity activity) LocationServices и вызвать контрольный список locationsettings(LocationSettingsRequest locationSettingsRequest)API для получения настроек местоположения устройства. Если параметры местоположения не соответствуют требованиям, ваше приложение может предложить пользователям предоставить соответствующие разрешения. Разрешение на местоположение должно быть предоставлено HMS Core (APK). В Android Q местоположение должно быть установлено всегда для ядра HMS (APK).

  2. Описание NO_MATCHED_CALLBACK — это отсутствие совпадающего обратного вызова. Пожалуйста, убедитесь, что правильный обратный вызов был передан в список параметров.

Для получения дополнительной информации см. Документы.