GPS получает местоположение пользователя только иногда, не всегда - PullRequest
0 голосов
/ 09 мая 2019

Я создаю форму вставки.Когда пользователь заполняет форму, координаты местоположения также сохраняются с данными.Я установил Высокая точность для получения местоположения.Но иногда это не работает на телефоне пользователя, широта и долгота возвращают нулевое значение.Я не могу исправить проблему, почему это происходит.

Вот мой код.

String latitude = "", longitude = "", latlngtime = "";

private Location mylocation;
GoogleApiClient mgoogleApiClient;
private final static int REQUEST_CHECK_SETTINGS_GPS = 21;

// set Google APi Client
private synchronized void setUpGClient() {
    mgoogleApiClient = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, 0, this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(LocationServices.API)
        .build();
    mgoogleApiClient.connect();
}

// get Location
private void getMyLocation() {
    if (mgoogleApiClient != null) {
        if (mgoogleApiClient.isConnected()) {
            int permissionLocation = ContextCompat.checkSelfPermission(CrmTask.this, android.Manifest.permission.ACCESS_FINE_LOCATION);

            int permissionLocation1 = ContextCompat.checkSelfPermission(CrmTask.this, Manifest.permission.ACCESS_COARSE_LOCATION);
            if (permissionLocation == PackageManager.PERMISSION_GRANTED && permissionLocation1 == PackageManager.PERMISSION_GRANTED) {
                mylocation = LocationServices.FusedLocationApi.getLastLocation(mgoogleApiClient);
                LocationRequest locationRequest = new LocationRequest();
                locationRequest.setInterval(1000);
                locationRequest.setFastestInterval(500);
                locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                    .addLocationRequest(locationRequest);
                builder.setAlwaysShow(true);
                PendingResult result = LocationServices.SettingsApi.checkLocationSettings(mgoogleApiClient, builder.build());

                result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
                    @Override
                    public void onResult(LocationSettingsResult result) {
                        final Status status = result.getStatus();
                        switch (status.getStatusCode()) {
                            case LocationSettingsStatusCodes.SUCCESS:
                                try {
                                    int permissionLocation = ContextCompat.checkSelfPermission(CrmTask.this, android.Manifest.permission.ACCESS_FINE_LOCATION);
                                    if (permissionLocation == PackageManager.PERMISSION_GRANTED) {
                                        mylocation = LocationServices.FusedLocationApi.getLastLocation(mgoogleApiClient);
                                        updateLocationData(mylocation);
                                    }
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    //Toast.makeText(GetLocationActivity.this,""+e.getMessage(), Toast.LENGTH_LONG).show();
                                }
                                Log.i("TAG", "All location settings are satisfied.");

                                break;
                            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                try {
                                    status.startResolutionForResult(CrmTask.this, REQUEST_CHECK_SETTINGS_GPS);
                                } catch (IntentSender.SendIntentException e) {
                                    // Ignore the error.
                                }
                                break;
                            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
//                              Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog not created.");
                                break;
                            }
                        }
                    });
                }
            }
        }
    }

    // update location latitude and longitude
    private void updateLocationData(Location location) {
        if (location != null) {
            // here I get coordinates

            Double lat = location.getLatitude();
            Double lng = location.getLongitude();
            latitude = String.valueOf(lat);  
            longitude = String.valueOf(lng);
            latlngtime = String.valueOf(location.getTime());
        }
    }
...