Я пытаюсь выполнить двухэтапное определение местоположения с помощью моего LocationListener
. Он работает, как и ожидалось, на каждой версии Android, как и ожидалось. Только на ICS я не могу остановить определение местоположения GPS.
// inner class inside my PoiActivity
private class CustomLocationListener implements LocationListener {
String currentProvider = LocationManager.NETWORK_PROVIDER;
@Override
public void onLocationChanged(Location location) {
if (location != null) {
if (currentProvider.equals(LocationManager.NETWORK_PROVIDER)) {
System.out.println(this);
mLastKnownLocation = location;
mHandler.sendEmptyMessage(0);
mLocationManager.removeUpdates(this);
Log.i("CustomLocationListener", "Got a rough location, removing the network listener ");
Toast.makeText(PoiActivity.this, "Network found and removed", Toast.LENGTH_LONG).show();
mLocationManager
.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, Constants.LOCATION_MAX_ACCURACY, this);
currentProvider = LocationManager.GPS_PROVIDER;
} else if (location.getAccuracy() < Constants.LOCATION_MAX_ACCURACY
&& currentProvider.equals(LocationManager.GPS_PROVIDER)) {
System.out.println(this);
mLastKnownLocation = location;
mHandler.sendEmptyMessage(0);
mLocationManager.removeUpdates(this);
Log.i("CustomLocationListener", "Got a rough location, removing the gps listener ");
Toast.makeText(PoiActivity.this, "GPS found and removed", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
На основе информации Toast и LogCat слушатель удаляется, и на каждой версии, кроме ICS, я вижу, что значок GPS исчезает. На ICS значок появляется через пару секунд, но я никогда не получал тосты более одного раза, поэтому мой слушатель успешно удален.
Уничтожение приложения с помощью диспетчера задач или с помощью информации о приложении не останавливает отображение значка GPS снова и снова.
Я полагаю, что это конкретная проблема ICS, но я не могу найти отчет об ошибке для этого или аналогичного описания проблемы.
У кого-нибудь есть обходной путь? Потому что я не хочу, чтобы у пользователя возникало ощущение, что я несколько раз вытащил его и потреблял батарею без какой-либо выгоды ...