Получение позиции от класса Android - PullRequest
0 голосов
/ 14 сентября 2018

Я ищу класс, чтобы получить местоположение, чтобы получить широту и долготу. Я вызываю этот класс из фрагмента, он выбирает лучшего поставщика и вызывает метод для определения местоположения var. У меня есть эта переменная position, но когда я возвращаю переменную pos, position is null; Зачем? Я пропустить эту переменную?

var pos в методе все нормально, но когда я вернусь, будет null.

public class locationmng {
public Context context;
private FusedLocationProviderClient fusedLocationProviderClient;
Location position;


public locationmng(Context c){
    context=c;

}

public Location GetLoc()  {
    if(ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

        LocationManager lm = (LocationManager) 
        context.getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String bestProvider = lm.getBestProvider(criteria, true);

        if (bestProvider.equals(LocationManager.NETWORK_PROVIDER)) {

            position = getcoarseposition();

            return position;
       } 

}

@SuppressLint("MissingPermission")
public  Location getcoarseposition() {
   final Location[] pos = new Location[1];
    fusedLocationProviderClient=
      LocationServices.getFusedLocationProviderClient(context);
    fusedLocationProviderClient.getLastLocation()
            .addOnSuccessListener((Activity) context, new 
               OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if (location != null) {
                         pos[0] =location;
                    }else {
                        Log.i("locmng","not found loc ");
                    }

                }
            });

    Log.i("locationmanager6894","ho trovato "+ a[0].getLongitude()+ "lat: "+ a[0].getLatitude());

    return pos[0];

}

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вероятно, не все настройки местоположения выполнены.Вам следует предложить пользователю изменить настройки своего местоположения с помощью класса SettingsClient.Документация здесь: https://developer.android.com/training/location/change-location-settings

В основном вам необходимо:

  • создать запрос местоположения
protected void createLocationRequest() {
    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
  • получить текущее местоположениенастройка
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();


SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
  • добавить слушателей завершения задачи, чтобы понять, в порядке ли ваши настройки местоположения
task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
    @Override
    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        // All location settings are satisfied. The client can initialize
        // location requests here.
        // ...
    }
});

task.addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        if (e instanceof ResolvableApiException) {
            // Location settings are not satisfied, but this can be fixed
            // by showing the user a dialog.
            try {
                // Show the dialog by calling startResolutionForResult(),
                // and check the result in onActivityResult().
                ResolvableApiException resolvable = (ResolvableApiException) e;
                resolvable.startResolutionForResult(MainActivity.this,
                        REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
                // Ignore the error.
            }
        }
    }
});

Как только вы закончите эти три шага,Вы сможете получить местоположение пользователя

0 голосов
/ 14 сентября 2018

Ваше местоположение устанавливается на OnSuccessListener<Location>(), оно не звонит сразу.Итак, вы устанавливаете слушателя, но он будет вызываться только в том случае, если будет получено ваше местоположение.Итак, что вам нужно сделать: выполнить всю логику, определенную в GetLoc() в вашем onSuccess(Location location) методе вашего слушателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...