6

Я разрабатываю приложение для Android; это приложение должно периодически отправлять (каждые 10 минут) текущую позицию (координаты) в веб-службу. Но ... Я немного смущен более правильным способом (и более дружелюбным к батарее устройства), чтобы сделать это.Периодически получайте местоположение (координаты) без увеличения расхода батареи

Я прочитал это answer и ее метод _getLocation() выглядит хорошо; но я не знаю, сможет ли этот метод получить доступное мне место; общая доступность ...

Я хотел бы, если это место недоступно с использованием GSM/WIFI, приложение выбирает метод GPS.

Это то, что делает этот метод?

private void _getLocation() { 
    // Get the location manager 
    LocationManager locationManager = (LocationManager) 
      getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String bestProvider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(bestProvider); 
    try { 
     lat = location.getLatitude(); 
     lon = location.getLongitude(); 
    } catch (NullPointerException e) { 
     lat = -1.0; 
     lon = -1.0; 
    } 
} 

Кто-нибудь знает, как можно периодически получать координаты устройства ... без значительного увеличения потребления батареи?

+0

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

+0

Прежде всего; Спасибо за ваш комментарий. И да, я так беспокоюсь об этом. Можете ли вы дать мне пример для «Пассивного Провайдера»? – tomloprod

+0

см. Мой ответ ниже. –

ответ

4

Если вы беспокоитесь об аккумуляторной батарее и не слишком строго соблюдаете 10-минутный интервал, вы можете попытаться использовать PassiveProvider вместо GPS/Coarse.
Обычно другие приложения часто запрашивают места, поэтому вам не нужно беспокоиться об этом.
Если вы строги, то можете попытаться попросить местоположение самостоятельно в случае, если один из них не был получен в прошлом промежутке.
Вот пример использования Пассивного провайдера.

LocationManager locationManager = (LocationManager) this 
     .getSystemService(Context.LOCATION_SERVICE); 
LocationListener locationListener = new LocationListener() { 

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

    @Override 
    public void onProviderEnabled(String provider) {} 

    @Override 
    public void onProviderDisabled(String provider) {} 

    @Override 
    public void onLocationChanged(Location location) { 
     // Do work with new location. Implementation of this method will be covered later. 
     doWorkWithNewLocation(location); 
    } 
}; 

long minTime = 10*60*1000; 
long minDistance = 0; 

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, minTime, minDistance, locationListener); 
+0

Этот снайпер получит кооры, даже когда телефон приостановлен? –

+0

Что вы имеете в виду по телефону приостановлено? если службы определения местоположения отключены, вы не получите обновлений местоположения. Вы все еще можете зарегистрировать locationListener, но он не будет вызван. –

+0

Привет @ О, спасибо за ваш ответ, что я имел в виду: пустой экран, заблокированный экран, черный экран, idk правильный термин для него ... например, когда и нажмите кнопку выключения, экран выключится, но мой телефон все еще включен. –

1

Службы Службы имеют API местоположения с низким потреблением. Вы можете нашли больше информации в Android Developer Site

UPDATE

Here вы нашли пример Play Место службы хранится в Github. Посмотрите пример LocationUpdates.

При настройке запроса местоположения вы можете изменить приоритет, см. Дополнительную информацию here. Я думаю, что вы используете PRIORITY_BALANCED_POWER_ACCURACY

+0

Благодарим за помощь @ClarkXP. Могу ли я спросить вас о комментарии @Ohad Zadok? Является ли ваш пример лучше, чем «PassiveProvider» в отношении экономии батареи и доступности местоположения устройств? – tomloprod

+0

@tomloprod Я думаю, что Play Services проще настроить и более эффективно управлять источниками местоположения и истощением энергии. См. Мое обновление – ClarkXP

+0

Я не согласен, так как PassiveProvider не запускает GPS самостоятельно, он не использует энергию вообще. –