2013-02-28 3 views
0

Я разработал приложение, использующее текущее местоположение каждые 30 секунд. Приложение завершено. Он отлично работает на устройствах ICS (Android 4), JellyBean (Android 4.1), но когда я запускаю приложение на Android 2.3 или Android 2.2, обновления GPS приложений каждые 2/3 секунды позже и постоянно обновляются. Хотя мой код выполняется в течение 30 секунд, и он отлично работает (30 секунд спустя) в Android 4,4.1, но не работает с Android 2.3 или 2.2.Обновления местоположения GPS постоянно в Android 2.2 и Android 2.3

Я делюсь код ....

public class GPSManager 
{ 
    //private static final int gpsMinTime = 60000; 
    //private static final int gpsMinDistance = 0; 

    private long gpsMinTime = 0; 
    private float gpsMinDistance = 0; 

    private static LocationManager locationManager = null; 
    private static LocationListener locationListener = null; 
    private static GPSCallback gpsCallback = null; 

    public GPSManager(long gpsMinTime,float gpsMinDistance) 
    { 
     this.gpsMinTime = gpsMinTime; 
     this.gpsMinDistance = gpsMinDistance; 

     GPSManager.locationListener = new LocationListener() 
     { 
      @Override 
      public void onLocationChanged(final Location location) 
      { 
       if (GPSManager.gpsCallback != null) 
       { 
        GPSManager.gpsCallback.onGPSUpdate(location); 
       } 
      } 

      @Override 
      public void onProviderDisabled(final String provider) 
      { 

      } 

      @Override 
      public void onProviderEnabled(final String provider) 
      { 

      } 

      @Override 
      public void onStatusChanged(final String provider, final int status, final Bundle extras) 
      { 

      } 
     }; 
    } 

    public GPSCallback getGPSCallback() 
    { 
     return GPSManager.gpsCallback; 
    } 

    public void setGPSCallback(final GPSCallback gpsCallback) 
    { 
     GPSManager.gpsCallback = gpsCallback; 
    } 

    public void startListening(final Context context) 
    { 
     if (GPSManager.locationManager == null) 
     { 
      GPSManager.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     } 

     final Criteria criteria = new Criteria(); 

     criteria.setAccuracy(Criteria.ACCURACY_MEDIUM); // accuracy_midium 
     criteria.setSpeedRequired(true); 
     criteria.setAltitudeRequired(false); 
     criteria.setBearingRequired(true); 
     criteria.setCostAllowed(true); 
     criteria.setPowerRequirement(Criteria.POWER_MEDIUM); 

     final String bestProvider = GPSManager.locationManager.getBestProvider(criteria, true); 

     if (bestProvider != null && bestProvider.length() > 0) 
     { 
      GPSManager.locationManager.requestLocationUpdates(bestProvider, this.gpsMinTime, 
        this.gpsMinDistance, GPSManager.locationListener); 

     } 
     else 
     { 
      final List<String> providers = GPSManager.locationManager.getProviders(true); 

      for (final String provider : providers) 
      { 
       GPSManager.locationManager.requestLocationUpdates(provider, this.gpsMinTime, 
         this.gpsMinDistance, GPSManager.locationListener); 
      } 
     } 
    } 

    public void stopListening() 
    { 
     try 
     { 
      if (GPSManager.locationManager != null && GPSManager.locationListener != null) 
      { 
       GPSManager.locationManager.removeUpdates(GPSManager.locationListener); 
      } 

      GPSManager.locationManager = null; 
     } 
     catch (final Exception ex) 
     { 

     } 
    } 


} 

И мой Расположение код обновления здесь:

private static final long GPS_MINTIME = 30000; 
private static final float GPS_MINDISTANCE = 100; 
gpsManager = new GPSManager(GPS_MINTIME,GPS_MINDISTANCE); 
       gpsManager.startListening(getApplicationContext()); 
       gpsManager.setGPSCallback(this); 

Любая идея, почему это происходит. Благодарю.

+0

Я нашел то же самое на своем телефоне. Когда это было на 2.3, minUpdateTime, казалось, игнорировалось, после того как ОС была обновлена ​​до ICS, он выполнил контракт. – NickT

+0

Вы уверены, что вы устанавливаете минимальное время на '30Secs', я вижу, что вы установили' 0' в свой текущий код – VenomVendor

+0

Странно! Мое приложение под управлением ОС 2.3/2.2 мигает/мерцает каждые 2/3 секунды позже, чтобы обновить текущее местоположение GPS. Удивление! – arefin

ответ

0

Изменение GPS_MINTIME больше 6000
Будет работать отлично.

+0

Мой GPS_MINTIME составляет 30 секунд (30000 мс), вы протестировали @VenomVendor. – arefin

+0

Пожалуйста, проверьте ваш код, это '0sec' – VenomVendor

+0

@VenomVendor - прочитайте его правильно, это 30 секунд – NickT

0

пожалуйста, проверьте этот ответ на SO https://stackoverflow.com/a/4245527/1438915

в апи < время 4,0 мин не в обязательном порядке принимать во внимание может быть неточным иногда. работает как подсказка.

UPDATE

из документации INFO я думаю, вы должны прочитать это.

+0

app использует 30000 мс (30 секунд), а минимальное расстояние - 100, поэтому любая идея сейчас? – arefin

+0

@ user748178 извините за свою ошибку. – Siddhesh

+0

Благодарим вас за ответ. Если вы найдете какое-либо решение, поделитесь этим. – arefin

0

В дополнение к моему комментарию, это известная (но не широко известная ошибка/функция). См. Google Groups Post Я добавил свою поддержку в это предложение, но поток теперь закрыт, поскольку он исправлен в 4.1.

+0

Это значит, что я должен загрузить приложение с этой ошибкой? Любое предложение? – arefin

+0

Я закончил тем, что разместил прослушиватель местоположений в связанной службе со своим собственным планировщиком. Я передал время обновления MY min в качестве параметра службы, которая запускала небольшой конечный автомат, управляемый таймером. – NickT

+0

Я также планировал контролировать обновление gps в своем собственном планировщике/таймере. Спасибо @NickT – arefin

Смежные вопросы