2015-02-25 10 views
-1

Мое приложение использует карту google для отображения местоположения пользователя в режиме реального времени. Поэтому я бы хотел, чтобы он обновлялся при каждом изменении данных на моем сервере Parse.Обновление данных в реальном времени

Я посмотрел по всей сети, и, как я вижу это у меня есть 3 варианта:

  1. с использованием SyncAdapter - проблема в том, что везде написано, что он не предназначен для передачи данных в режиме реального времени (Я действительно не понимаю, почему), с другой стороны, он должен быть более эффективным, чем обновление каждые 5 секунд.

  2. Использование asyncTask - проблема в том, что он, вероятно, потребляет много заряда батареи и данных, чтобы запускать его каждые 5 секунд.

  3. используя обслуживание - такой же проблема как asyncTask.

Как я очень смущен, пожалуйста, помогите мне понять, что является подходящим способом реализации моей карты в реальном времени. Thank's all

+0

Если вы заботитесь о Батарее, то почему __Google__ разработал __Google Play Services__ ?? лучший вариант - это службы, работающие в фоновом режиме –

+0

Я использую GCM для своих приложений. когда сервер обновляет данные, сервер передает широковещательную передачу. клиент получает трансляцию, а затем запускает обновление –

+0

@MD Я не понял ваше предложение. Насколько я понимаю, используя сервис, я должен будет сделать запрос каждые несколько секунд, чтобы он выглядел как в реальном времени. Разве он не потребляет много батареи? – evyamiz

ответ

0

Лучший способ узнать, как использовать LocationListener для обновления местоположения, только если он был изменен. Вы можете использовать метод onLocationChanged() для обновления местоположения.

public class LocationHelper { 
    private LocationManager locationManager; 
    private Location currentLocation; 

    public LocationHelper(Context context) { 
      locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
      locationManager.removeUpdates(locationListener); 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
    } 

    public void setLocation(Location location) { 
     currentLocation = location; 
    } 

    private final LocationListener locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      setLocation(location);//Only update location if it has changed. 
     } 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
     @Override 
     public void onProviderEnabled(String provider) {} 
     @Override 
     public void onProviderDisabled(String provider) {} 
    }; 
} 

Если местоположение не было изменено, вы можете просто запомнить последнее известное местоположение.

+0

Исправьте меня, если я ошибаюсь, но ваш ответ относится к тому, как я могу показывать себя постоянно, но я имел в виду спросить, что является подходящим способом для непрерывного отображения всех других пользователей. – evyamiz

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