Немного запоздалые для партии, но полагал, что это было бы целесообразно, чтобы получить возможность отправлять обновления для людей, читающих это в 2016 году (или позже).
Как было предложено другими ответами, лучшим способом в настоящее время является использование API-интерфейса Google Apps для сервисов. Если вам действительно не нужен мелкомасштабный контроль поставщиков местоположения, Google API обязуется дать вам более точную оценку местоположения за более короткое время, используя только ресурсы (GPS, WiFi, Cell Tower, Bluetooth), которые действительно необходимы для устройства каждого пользователя.
К сожалению, подписка на обновления местоположения по-прежнему может быть затруднительной (как указывал Matthias, API немного сложнее). Вы должны сделать некоторые или все из следующих действий:
- После: Запрашивать разрешение местоположения (Зефир и выше)
- Подключение к API, обрабатывать различные ошибки и угловые случаи
- Проверить и, возможно, включить необходимые провайдеры местонахождения
- обновления Запрос местоположения
Я боролся с установкой обновлений местоположения в нескольких различных проектах и решить, d, чтобы написать класс, который делает большую часть работы для вас:
LocationAssistant - Hassle-free location updates on Android
Я также написал подробное сообщение в блоге о настройке Android расположение на широком диапазоне Android версий, которые вы можете read here.
Таким образом, чтобы решить исходную задачу (получить последнюю актуальную местоположение с точностью GPS как можно быстрее):
public class MyActivity extends Activity implements LocationAssistant.Listener {
private LocationAssistant assistant;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// You can specify a different accuracy and interval here, depending on the needs of your app
assistant = new LocationAssistant(this, this, LocationAssistant.Accuracy.HIGH, 5000, true);
}
@Override
protected void onResume() {
super.onResume();
assistant.start();
}
@Override
protected void onPause() {
assistant.stop();
super.onPause();
}
@Override
public void onNewLocationAvailable(Location location) {
// Do something with the location
}
...
}
onNewLocationAvailable()
вызывается как только первое правильное местоположение является доступный. Существует несколько методов прослушивателя, которые необходимо реализовать для решения ситуаций, когда разрешение не предоставляется или поставщики местоположения отключены. Но в сущности это он.
LocationAssistant также позволяет надежно отбрасывать ложные местоположения (в случае, если это требуется для вашего приложения).
См. Мой отредактированный ответ –