Ответ 1
LocationManager
, похоже, не имеет механизма тайм-аута. Но LocationManager
имеет метод с именем removeUpdates(LocationListener listener)
, который вы можете использовать для отмены любых обратных вызовов в указанном LocationListener
.
Итак, вы можете реализовать свой собственный тайм-аут с помощью следующего псевдокода:
final LocationManager locationManager
= (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// ...
final LocationListener myListener = new LocationListener() {
//... your LocationListener methods, as above
}
Looper myLooper = Looper.myLooper();
locationManager.requestSingleUpdate(criteria, myListener, myLooper);
final Handler myHandler = new Handler(myLooper);
myHandler.postDelayed(new Runnable() {
public void run() {
locationManager.removeUpdates(myListener);
}
}, MY_TIMEOUT_IN_MS);
Я не уверен, что произойдет, если вы вызываете locationManager.removeUpdates(myListener)
после, вы получаете Местоположение. Вы можете проверить это, прежде чем звонить removeUpdates
. Или вы можете добавить что-то вроде этого к методу onLocationChanged
в своем обратном вызове (и, возможно, к другим методам):
myHandler.removeCallbacks(myRunnable); // where myRunnable == the above Runnable