Я хочу нажать кнопку и получить текущее местоположение, я понимаю, что не могу сразу получить местоположение, поэтому я сделал следующее:
событие клика:
public void onClick(View v)
{
ProgressDialog MyDialog = ProgressDialog.show( MainPage.this, " " , " Loading. Please wait ... ", true);
MyActionsHandler myActionsHandler = new myActionsHandler(MainPage.this);
myActionsHandler.startSearch();
MyDialog.dismiss();
Intent intent = new Intent(MainPage.this, ResultPage.class);
startActivity(intent);
}
и это обработчик, который ищет местоположение
public void startSearch(long timeInterval,float distanceInterval)
{
LocationManager lm = (LocationManager)_context.getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, timeInterval,
distanceInterval, this);
while(!_locationFound)
{
//wait till location is found
}
}
public void onLocationChanged(Location location)
{
if (location != null)
{
double latitude = location.getLatitude();
double longitude = location.getLongitude();
float speed = location.getSpeed();
float bearing = location.getBearing();
Log.d("LOCATION CHANGED", location.getLatitude() + "");
Log.d("LOCATION CHANGED", location.getLongitude() + "");
try
{
doTheProcess(_searchType,latitude, longitude, speed, bearing);
_locationFound = true;
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Я понимаю, что это не работает, потому что цикл находится в том же потоке,
так что вы предлагаете лучшее решение для этого?
в javadoc requestLocationUpdates есть «Вызывающий поток должен быть потоком Looper, таким как основной поток вызывающего Activity». но я не нашел ни одного примера, поэтому я не знаю, правильное ли это решение.
еще один вопрос,
getLastKnownLocation()
работает, даже если я никогда раньше не вызывал locationManager?
спасибо