2016-04-09 6 views
0

Я использую сервисы google play, чтобы получить свое последнее местоположение. проект работает нормально без закрытия силы, однако он никогда не получает никакого места. я предполагаю, что он не требует GPS или мобильной сети, поскольку сервисы google play уже имеют мое последнее местоположение на основе этих двух стратегий. мой код должен установить мое местоположение в текстовом поле. но это неКак мне узнать свое последнее известное местоположение в андроиде?

public class MainActivity extends Activity implements 
ConnectionCallbacks, OnConnectionFailedListener { 

GoogleApiClient mGoogleApiClient; 
Location mLastLocation; 
TextView tvLatlong; 

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

    tvLatlong = (TextView) findViewById(R.id.textView1); 

    buildGoogleApiClient(); 

    if(mGoogleApiClient!= null){ 
     mGoogleApiClient.connect(); 
    } 
    else 
     Toast.makeText(this, "Not connected...", Toast.LENGTH_SHORT).show(); 


} 

@Override 
public void onConnectionFailed(ConnectionResult arg0) { 
    Toast.makeText(this, "Failed to connect...", Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onConnected(Bundle arg0) { 

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 

    if (mLastLocation != null) { 
     tvLatlong.setText("Latitude: "+ String.valueOf(mLastLocation.getLatitude())+"Longitude: "+ 
       String.valueOf(mLastLocation.getLongitude())); 
    } 

} 

@Override 
public void onConnectionSuspended(int arg0) { 
    Toast.makeText(this, "Connection suspended...", Toast.LENGTH_SHORT).show(); 

} 

protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(LocationServices.API) 
     .build(); 
} 
+0

Получаете ли вы обратный вызов в Onconnected? –

ответ

0

Первый onConnected не вызывается сразу. Это зависит от различных факторов. Поэтому держите оператор журнала и проверяйте, когда вызывается onConnected.

Также, если местоположение устройства выключено, вы никогда не получите никаких данных. Он будет равен нулю.

Также не обязательно, чтобы клиент google api оставил ваше последнее местоположение независимо от того, подключен ли вы к Интернету или нет. Это может быть и не так. Он кэширует только последнее место, и кеш может быть очищен в любое время ОС Android.

0

GetLastLocation вызывается FusedLocationApi и сохраняет последнее местоположение на основе последнего клиента, который его использовал. Если ваше приложение является первым клиентом, который использует его, он, вероятно, не получит последнее место так быстро, как вы вызываете функцию «OnConnected()».

Здесь у вас есть несколько возможных вариантов:

1. Создать Checking тему
Вы могли бы реализовать поток, который проверяет последнее известное местоположение каждые X количество секунд. Затем, независимо от того, будет ли ваше приложение первым запускаться, вы в конечном итоге получите последнее место.
2. Реализовать Расположение Слушая
Вы также можете реализовать положение прослушивания в вашей деятельности и обновить ваше местоположение каждый раз, когда OnLocationChanged события.

+0

если я запустил приложение Google Maps один раз и нашел себя, получит ли мое последнее место? – abbie

+0

также «1. Создать проверку темы» - какой метод я должен назвать в своей теме? – abbie

+0

Вы должны вызвать метод getLastLocation(). –

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