0

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

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

第10804章

这是我的代码:

@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()方法失败:(

4

2 回答 2

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

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

有关更多信息,请参阅文档

于 2020-10-19T10:58:58.913 回答
0

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

        removeLocationUpdatesWithCallback();

从方法

                  private void location_initialize(){

并调用函数 removeLocationUpdatesWithCallback()

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

于 2020-10-09T23:42:34.423 回答