почему islocationavailable возвращает false? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть метод в моей деятельности, который начинает получать обновления местоположения. он работает с android 10, но не работает с android 4.4.2 (я установил высокую точность на телефоне, и все разрешения в порядке), а обратный вызов местоположения не срабатывает для результата определения местоположения, а параметр locationAvailability имеет значение false и после что мой обратный вызов местоположения никогда не срабатывает в зависимости от времени интервала:

protected void startLocationUpdates() {
        // Create the location request to start receiving updates
        mLocationRequest = new LocationRequest();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
        mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);

        // Create LocationSettingsRequest object using location request
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
        builder.addLocationRequest(mLocationRequest);
        LocationSettingsRequest locationSettingsRequest = builder.build();

        // Check whether location settings are satisfied
        SettingsClient settingsClient = LocationServices.getSettingsClient(this);
        settingsClient.checkLocationSettings(locationSettingsRequest)
                .addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
                    @SuppressLint("MissingPermission")
                    @Override
                    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                        Log.i(TAG, "All location settings are satisfied.");

                        mLocationCallback = new LocationCallback() {
                            @Override
                            public void onLocationAvailability(LocationAvailability locationAvailability) {
                                super.onLocationAvailability(locationAvailability);
                            }

                            @Override
                            public void onLocationResult(LocationResult locationResult) {
                                super.onLocationResult(locationResult);
                                if (locationResult == null)
                                    return;

                                mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
                                onLocationChanged(locationResult.getLastLocation());
                            }
                        };
                        //  Started location updates

                        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());

                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        int statusCode = ((ApiException) e).getStatusCode();
                        switch (statusCode) {
                            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                Log.i(TAG, "Location settings are not satisfied. Attempting to upgrade " +
                                        "location settings ");
                                try {
                                    // Show the dialog by calling startResolutionForResult(), and check the
                                    // result in onActivityResult().
                                    ResolvableApiException rae = (ResolvableApiException) e;
                                    rae.startResolutionForResult(SurveyActivity.this, REQUEST_CHECK_SETTINGS);
                                } catch (IntentSender.SendIntentException sie) {
                                    Log.i(TAG, "PendingIntent unable to execute request.");
                                }
                                break;
                            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                                String errorMessage = getString(R.string.please_allow_location);
                                Log.e(TAG, errorMessage);

                                Toast.makeText(SurveyActivity.this, errorMessage, Toast.LENGTH_LONG).show();
                        }

                    }
                });
    }
...