Я хочу сравнить широту и долготу из проанализированного JSON GET. Чтобы сравнить lat / lng из GET, мне нужно иметь текущее местоположение устройства lat / lng до того, как произойдет GET.
У меня есть метод, который использует onMyLocationButtonClick, и он прекрасно работает. Однако мне нужно, чтобы этот метод выполнялся в onMapReady, чтобы я мог сравнивать текущие значения широты / долготы устройств с тем, что анализируется из ответа JSON GET.
Это работает чудесно при нажатии даже на стертом эмуляторе, однако проблема заключается в получении и назначении устройствам текущих значений lat / lng ДО вызова API. Используя метод onClick, эти значения получаются только для onClick, и это происходит после выполнения вызова API и анализа JSON.
Я попытался просто позвонить onMyLocationClick(Location location)
, но получаю ошибку "не могуразрешить символ местоположения ". Я думаю, что я должен назначить locationListener для location, но я не совсем уверен, как это сделать. Через некоторое время все чтение и исследования превращаются в суп, так что теперь я выхожу и прошу помощи. :)
Конечным результатом будет onMapReady:
- Разрешения местоположения проверяются и запрашиваются, если необходимо.
- При подтверждении разрешений, увеличивайте текущее местоположение устройства наотобразить и присвоить текущие значения lat / lng переменным lat / lng.
- Передать значения переменных lat / lng с помощью вызова API для сравнения текущих значений lat / lng со значениями lat / lng, полученными из API.
- Я полагаю, что это можно сделать с помощью getRetrofit (lat, lng) так же, как и с моим вызовом setAddress.
Любая помощь очень ценится.
Метод onMapReady:
public void onMapReady(GoogleMap map) {
mMap = map;
mMap.setOnMyLocationButtonClickListener(this);
mMap.setOnMyLocationClickListener(this);
enableMyLocation(); // checks for fine and coarse location permissions
// onMyLocationClick(Location location);
getRetrofit(); //call to API
}
The method I want to execute onMapReady before the call to the API without having to click the location button:
@Override
public void onMyLocationClick(Location location) {
// get device current lat/lng
this.lat = location.getLatitude();
this.lng = location.getLongitude();
setAddress(lat, lng); // method to reverse geocode to physical address
// zoom to current location on map
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13));
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(location.getLatitude(), location.getLongitude())) // Sets the center of the map to location user
.zoom(17) // Sets the zoom
.bearing(90) // Sets the orientation of the camera to east
.tilt(40) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}