Не удается получить последнее местоположение, хотя разрешения предоставлены - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть следующий класс, который распространяется на все мои действия, где я хочу сохранить последнее местоположение с помощью LocationServices.

При отладке кажется, что разрешения предоставлены, и я ввожу метод onComplete, но task.getResult () всегда имеет значение null. Как это возможно?

public class MyAppCompatActivity extends AppCompatActivity {
private static final int LOCATION_REQUEST_CODE = 1000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
                LOCATION_REQUEST_CODE);

    } else
        setUserLocation();
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case LOCATION_REQUEST_CODE: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                setUserLocation();
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request.
    }
}

@SuppressLint("MissingPermission")
private void setUserLocation() {
    LocationServices.getFusedLocationProviderClient(this).getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
        @Override
        public void onComplete(@NonNull Task<Location> task) {
            ROUserInfo user = UserManager.getROUserInfo();
            if(user==null || task.getResult()==null)
                return;
            user.User._Position._Latitude=task.getResult().getLatitude();
            user.User._Position._Longitude=task.getResult().getLongitude();
            UserManager.updateUserOnServer(user);
        }
    });
}

}
...