2016-07-07 5 views
2

Я знаю, что это было задано раньше, но все доступные решения требуют от меня использования метода onLocationChanged(), поэтому я могу использовать методы getLatitude() и getLongitude() для получения координат.Как я могу получить текущее местоположение? Android Studio

Но при изменении местоположения моего устройства будет вызываться onLocationChanged(). Поэтому, чтобы получить мое текущее местоположение, мне пришлось бы переместить мое устройство.

Но я хочу получить текущие координаты, не перемещая устройство. Кроме того, я где-то читал, что могу вызвать метод onLocationChanged() вручную, и я могу получить последнее известное местоположение, но опять же,

Возможно ли, что последнее известное местоположение не будет моим текущим местоположением? или можно использовать последнее известное решение для определения местоположения?

Это часть класса, который я использую для реализации LocationListener.

public class MyLocListener extends MapsActivity implements LocationListener { 

    public void onLocationChanged(Location location) 
    { 
     if(location!=null) 
     { 
      MapsActivity.setLatitude(location.getLatitude()); 
      MapsActivity.setLongitude(location.getLongitude()); 
     } 
    }} 

Это переопределение функции, которую я использую для предоставления координат моей активности карты. широта и долгота - две переменные двойного типа. В этом классе переменные широты и долготы начинаются с 0, и они остаются такими, поскольку функция onLocationChanged() вызывается только при изменении моего местоположения. Поэтому я не вижу свое текущее местоположение на карте.

@Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 


     LocationManager myLocManager; 

     myLocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     MyLocListener loc = new MyLocListener(); 
     if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     myLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc); 

     LatLng sydney = new LatLng(latitude, longitude); 

     mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    } 
+1

Если вы будете искать в Интернете «андроида текущее местоположение» вы найдете https://developer.android.com/training/location/retrieve-current.html –

+0

иметь взгляд ответ на шаг за шагом кода http://stackoverflow.com/a/38397092/5955362 –

ответ

0

Вы должны использовать GooglePlayServices

compile 'com.google.android.gms:play-services-location:7.0.0' 

Чтобы получить место,

if (mGoogleApiClient == null) { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(LocationServices.API) 
     .build(); 
} 
if (mGoogleApiClient != null) { 
    mGoogleApiClient.connect(); 
} 

После подключения

public class MainActivity extends ActionBarActivity implements 
     ConnectionCallbacks, OnConnectionFailedListener { 
    ... 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
       mGoogleApiClient); 
     if (mLastLocation != null) { 
      mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude())); 
      mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude())); 
     } 
    } 
} 

Для получения более подробной информации проверить documentation.

0

изменить свой код внутри места. Поскольку получение местоположения асинхронно, ваша широта и долгота никогда не отражаются. оптимизируйте инициализации по мере необходимости.

public class MyLocListener extends MapsActivity implements LocationListener { 

public void onLocationChanged(Location location) 
{ 
    if(location!=null) 
    { 
     MapsActivity.setLatitude(location.getLatitude()); 
     MapsActivity.setLongitude(location.getLongitude()); 

    LatLng sydney = new LatLng(location.getLatitude(), location.getLongitude); 

    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 

    } 
}} 
+0

onLocationUpdate начинает регистрацию обновлений с первого вызова requestLocations, как только поставщик становится доступным. Он будет продолжать возвращать обновленные местоположения, даже если вы не будете время от времени перемещаться – Kushan

Смежные вопросы