Я написал свой менеджер местоположений, чтобы проверять наличие обновлений в местоположении пользователя каждые 30 секунд. Код работает нормально, то есть я получаю обновления в местоположении пользователя. Но проблема в том, что значок GPS всегда отображается в строке состояния сверху. Я предполагаю, что он должен быть виден только один раз за 30 секунд. Является ли это нормальным, или я делаю что-то неправильно?Что я вижу значок GPS постоянно?
public volatile Double mLatitude = 0.0;
public volatile Double mLongitude = 0.0;
int minTime = 30000;
float minDistance = 0;
MyLocationListener myLocListener = new MyLocationListener();
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setSpeedRequired(false);
String bestProvider = locationManager.getBestProvider(criteria, false);
locationManager.requestSingleUpdate(criteria, myLocListener, null);
locationManager.requestLocationUpdates(bestProvider, minTime, minDistance, myLocListener);
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc)
{
if (loc != null) {
//Do something knowing the location changed by the distance you requested
mLatitude = loc.getLatitude();
mLongitude = loc.getLongitude();
Toast.makeText(mContext, "Location Changed! "+Double.toString(mLatitude)+" "+Double.toString(mLongitude), Toast.LENGTH_LONG).show();
}
}
@Override
public void onProviderDisabled(String arg0)
{
//Do something here if you would like to know when the provider is disabled by the user
Toast.makeText(mContext, "Provider Disabled! "+Double.toString(mLatitude)+" "+Double.toString(mLongitude), Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String arg0)
{
//Do something here if you would like to know when the provider is enabled by the user
Toast.makeText(mContext, "Provider Enabled! "+Double.toString(mLatitude)+" "+Double.toString(mLongitude), Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
//Do something here if you would like to know when the provider status changes
Toast.makeText(mContext, "Provider Status Changed! "+Double.toString(mLatitude)+" "+Double.toString(mLongitude), Toast.LENGTH_LONG).show();
}
}
Что делать, если я изменю интервал, возможно, на 10 минут? Будет ли значок GPS исчезнет в этом случае и снова появится через 10 минут? Если нет, то, возможно, мне следует запустить runnable, который запрашивает requestSingleUpdate через каждые 10 минут? – iamlegend
Нет. Потому что вы по-прежнему запрашиваете обновления. Если вы действительно хотите, чтобы это так сильно исчезло, вам нужно прекратить запрашивать обновления и повторно запросить их позже. Но ожидайте, что через минуту или две вы получите сигнал после того, как вы его попросите, и для этого потребуется еще минута или около того, чтобы сигнал стал точным. В течение этого времени будет показан символ. Почему вы так обеспокоены этим? Если вы не пытаетесь скрыть тот факт, что вы просите место, это не должно быть большой проблемой. –
Я не хочу терять аккумулятор пользователя. Я хочу его «точное» место, но частота не важна. 5-10-минутная частота в порядке со мной. Какая была бы лучшая стратегия? – iamlegend