2016-01-15 3 views
0

My onLocationChanged не вызывается вообще. Любые идеи почему? У меня есть все разрешения. Вот мой код:onLocationChanged не называется

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

    createLocationRequest(); 
    buildGoogleApiClient(); 

    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

    MapFragment mapFragment = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)); 
    mapFragment.setRetainInstance(true); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (mGoogleApiClient != null) { 
     mGoogleApiClient.connect(); 
    } 
} 

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

protected void createLocationRequest() { 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(10000); 
    mLocationRequest.setFastestInterval(5000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    if (mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

@Override 
public void onConnectionSuspended(int i) { 
} 

@Override 
public void onLocationChanged(Location location) { 
    mCurrentLocation = location; 

    displayMessage("message","my position changed"); 

} 


protected void startLocationUpdates() { 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
} 


@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
} 

private void displayMessage(String title, String message) { 
    //displaying a message 
} 


@Override 
protected void onPause() { 
    super.onPause(); 
    stopLocationUpdates(); 
} 

protected void stopLocationUpdates() { 
    LocationServices.FusedLocationApi.removeLocationUpdates(
      mGoogleApiClient, this); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (mGoogleApiClient.isConnected() && !mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

Я последовал андроид учебник, и все это, кажется, то же самое, но onLocationChanged не вызывается (в данном случае сообщение не отображается). Btw, похоже, он работал около 3 недель назад, я не знаю, что изменилось.

+0

Как долго ждать обновления местоположения? Вы также можете установить 'mLocationRequest.setSmallestDisplacement (requiredResolutionInMeters)'. – mattm

+0

Достаточно долго, я думаю, даже через пару минут результата все равно нет. Когда это сработало, это было сделано мгновенно. – suue

+0

Какая обратная связь точно вы ожидаете 'onLocationChanged'? Вы не реализовали 'displayMessage'. – mattm

ответ

1

Я подозреваю, что проблема находится где-то с mRequestingLocationUpdates. В вашем коде нет указаний, если, если вообще, установлено значение mRequestingLocationUpdates.

Также для уточнения местоположения с помощью физических устройств время, необходимое для определения местоположения, зависит от того, что разрешено на устройстве: Настройки-> Местоположение. Во-первых, местоположение должно быть включено. Режим определит, включены ли GPS и WiFi или местоположение Bluetooth. Расположение WiFi и Bluetooth должно быть очень быстрым (несколько секунд), если вы находитесь в зоне с охватом WiFi/Bluetooth, и у вас есть соединение для передачи данных. GPS очень точный, но может быть очень медленным (минуты), в зависимости от видимости для спутников в небе и если у вас есть соединение для передачи данных с помощью GPS.

+0

mRequestingLocationUpdates - это глобальная переменная, установленная в true, и службы определения местоположения включены, поэтому ни одна из них не является проблемой, к сожалению, – suue

+0

, и вы подтвердили, что вызывается 'startLocationUpdates()', и все используемые там параметры верны? – WarrenFaith

+0

@suue Если для параметра 'mRequestingLocationUpdates' установлено значение true,' onResume' не будет вызывать 'startLocationUpdates'. – mattm

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