2015-01-20 3 views
0

Я создал приведенный ниже код, чтобы получить самую последнюю широту и долготу, не требуя от пользователя включения GPS, но просто полагайтесь на Wi-Fi или сеть для позиционирования. После запуска приложения он просто возвращает тост «The Lat 0.0 и Long 0.0». Я знаю, что это должно работать, потому что я загрузил здесь пример кода: https://github.com/googlesamples/android-play-location/tree/master/BasicLocationSample и адаптирован для работы в моем коде.Android не удается найти местоположение

Как я могу заставить это работать?

public class MainActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, OnConnectionFailedListener { 

    public static double lat; 
    public static double lng; 

    ViewPager viewPager = null; 

    /** 
    * Provides the entry point to Google Play services. 
    */ 
    protected GoogleApiClient mGoogleApiClient; 

    /** 
    * Represents a geographical location. 
    */ 
    protected Location mLastLocation; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     buildGoogleApiClient(); 

     String text = "The Lat is " + lat 
       + " and Long is " + lng; 

     Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show(); 

     }; 

     // Assign list to actionbar 
     actionBar.setListNavigationCallbacks(aAdpt, null); // DEPRACATED 

    } 


    /** 
    * Builds a GoogleApiClient. Uses the addApi() method to request the LocationServices API. 
    */ 
    protected synchronized void buildGoogleApiClient() { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if (mGoogleApiClient.isConnected()) { 
      mGoogleApiClient.disconnect(); 
     } 
    } 

    /** 
    * Runs when a GoogleApiClient object successfully connects. 
    */ 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     // Provides a simple way of getting a device's location and is well suited for 
     // applications that do not require a fine-grained location and that do not need location 
     // updates. Gets the best and most recent location currently available, which may be null 
     // in rare cases when a location is not available. 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if (mLastLocation != null) { 
      lat = mLastLocation.getLatitude(); 
      lng = mLastLocation.getLongitude(); 
     } else { 
      Toast.makeText(this,"No location detected", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     // Refer to the javadoc for ConnectionResult to see what error codes might be returned in 
     // onConnectionFailed. 

    } 


    @Override 
    public void onConnectionSuspended(int cause) { 
     // The connection to Google Play services was lost for some reason. We call connect() to 
     // attempt to re-establish the connection. 

     mGoogleApiClient.connect(); 
    } 
} 

}

+0

, пожалуйста, нет, еще не вопрос о месте ... – Selvin

+0

@Selvin Вы знакомы с тем, почему координаты не возвращаются? – Sauron

ответ

2

"лат", "LNG", и "mLastLocation" не установлен или действует до onConnected() не будет выполнена. Вам нужно понять, что эта операция асинхронная - то есть, местоположение не возвращается сразу, а предоставляется позже. Это было бы очевидно, если бы вы проверили, было ли «mLastLocation» недействительным, или нет, когда вы сделали этот тост.

+0

Как настроить его так, чтобы при загрузке приложения были установлены координаты? – Sauron

+0

переместить 'String text =" Lat is "+ lat +" и Long is "+ lng; Toast.makeText (getBaseContext(), текст, Toast.LENGTH_LONG) .show(); 'in' onConnected {if (mLastLocation! = Null) {... here ...}} '... i was blind чтобы не видеть этого – Selvin

+0

@Sauron простой ответ в том, что вы не можете. Место периодически обновляется и не может быть обновлено вообще, если приложение не запрашивает его, поэтому оно доступно только после того, как ваше приложение запросило его. –

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