2015-04-15 3 views
0

Я написал свой менеджер местоположений, чтобы проверять наличие обновлений в местоположении пользователя каждые 30 секунд. Код работает нормально, то есть я получаю обновления в местоположении пользователя. Но проблема в том, что значок GPS всегда отображается в строке состояния сверху. Я предполагаю, что он должен быть виден только один раз за 30 секунд. Является ли это нормальным, или я делаю что-то неправильно?Что я вижу значок GPS постоянно?

enter image description here

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(); 

     } 
    } 

ответ

4

Пока 1 или больше приложений назвали requestLocationUpdates для поставщика GPS, GPS будет оставаться. Он не отключается между запросами. Это не может привести к потере спутниковой блокировки, что может привести к ее восстановлению. Иногда это занимает больше 30 секунд. Поэтому GPS останется включенным до тех пор, пока вы не отмените регистрацию событий GPS.

+0

Что делать, если я изменю интервал, возможно, на 10 минут? Будет ли значок GPS исчезнет в этом случае и снова появится через 10 минут? Если нет, то, возможно, мне следует запустить runnable, который запрашивает requestSingleUpdate через каждые 10 минут? – iamlegend

+0

Нет. Потому что вы по-прежнему запрашиваете обновления. Если вы действительно хотите, чтобы это так сильно исчезло, вам нужно прекратить запрашивать обновления и повторно запросить их позже. Но ожидайте, что через минуту или две вы получите сигнал после того, как вы его попросите, и для этого потребуется еще минута или около того, чтобы сигнал стал точным. В течение этого времени будет показан символ. Почему вы так обеспокоены этим? Если вы не пытаетесь скрыть тот факт, что вы просите место, это не должно быть большой проблемой. –

+0

Я не хочу терять аккумулятор пользователя. Я хочу его «точное» место, но частота не важна. 5-10-минутная частота в порядке со мной. Какая была бы лучшая стратегия? – iamlegend