Трябва да се изчислят някои неща, когато се получи първото място (не е нужно да бъде много точен).
Имам LocatorManager и LocationListenerи досега имам boolean firstTime, който първоначално е вярно, и за пръв път, когато се нарича "onlocationChanged", го поставям на фалшива. Но всеки път, когато се използва методът onlocationChanged (на всеки 5 секунди), проверявам дали firstTime е невярно.
Това решение наистина не ме задоволява, има ли по-добър начин да проверите за събития за първи път? (Този въпрос може да е в по-широк контекст, а не само в GPS Местоположение).
Ще дам някакъв код за по-добро разбиране:
boolean firstLocation = true;
LocationManager locManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
LocationListener locListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (firstLocation == true) {
sights = getListForLocation(location, GPS_INITIAL_PERIMETER);
firstLocation = false;
}
// do something everytime onLocationChanged is called
}
};
/**
* starts the listener for GPS-Positions
*/
public void start() {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
GPS_UPDATE_TIME, GPS_UPDATE_DISTANCE, locListener);
}
Както можете да видите, трябва да направя нещо само за първи път, когато получа ново място.
Отговори:
1 за отговор № 1Започнете местоположението си с null и го проверете:
if(lastKnownLocation == null)
{
//first time
}
и в LocationListener направете:
@Override
public void onLocationChanged(Location location)
{
lastKnownLocation = location;
}