Главная » Разработка для Android » Выбор Источника данных для получения местоположения

0

В зависимости от устройства  Android может применять несколько раз- ных технологий  для определения текущего местоположения. Каждая  тех- нология, или LocationProvider, предоставляет разные возможности (каса- ется разницы в уровне энергопотребления, стоимости услуг и возможности определять  высоту над уровнем моря, скорость или информацию о курсе).

Чтобы  получить  экземпляр конкретного Источника данных, вызовите метод getProvider, передав ему нужное название:

String providerName = LocationManager.GPS_PROVIDER; LocationProvider gpsProvider;

gpsProvider = locationManager.getProvider(providerName);

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

Поиск доступных Источников данных

Класс  LocationManager содержит  статические  строковые  константы, которые возвращают имя одного из двух базовых источников:

LocationManager.GPS_PROVIDER;

LocationManager.NETWORK_PROVIDER.

Чтобы получить список имен всех доступных источников на устройстве, вызовите метод getProviders, используя параметр типа Boolean (в зависи- мости от его значения вы получите или все источники сразу, или только те, которые сейчас активны):

boolean enabledOnly = true;

List<String> providers = locationManager.getProviders(enabledOnly);

Поиск Источников данных для получения местоположения с помощью класса Criteria

В большинстве  случаев вы, вероятно,  предпочтете  не указывать  явно тип LocationProvider. Чаще всего будете обозначать  требования, которым должен отвечать источник, а Android сам определит наиболее подходящую технологию.

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

В листинге 8.1 с помощью Criteria указываются низкая точность, низкий уровень энергопотребления и отсутствие надобности в информации о высо- те над уровнем моря, направлении или скорости. При этом могут тратиться соответствующие денежные средства.

Листинг 8.1. Создание Criteria для LocationProvider

Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setSpeedRequired(false); criteria.setCostAllowed(true);

Определив нужные параметры  для Criteria,  можете использовать метод getBestProvider, который  возвращает  наиболее  подходящий тип LocationProvider, или метод getProviders, чтобы получить список источни- ков, соответствующих требованиям. Следующий фрагмент показывает, как использовать getBestProvider для определения лучшего источника согласно описанным критериям, где параметр типа Boolean позволяет ограничиться только активизированными источниками:

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

Если указанным критериям соответствуют сразу несколько источников, возвратится тот, у которого больше всего совпадений. Если ни один из ис- точников  не подходит, объект Criteria начинает  по очереди игнорировать

следующие параметры (в представленном порядке), пока источник не будет найден:

энергопотребление;

точность;

возможность возвращать  маршрут, скорость  и высоту над уровнем моря.

Критерий, касающийся денежных  затрат, никогда не игнорируется по умолчанию. Если не найдено ни одного источника, возвращается null.

Чтобы получить список имен всех источников, подпадающих под ваши требования, можете использовать метод getProviders. Он принимает объект Criteria и возвращает  отфильтрованный список строк, который  содержит все доступные типы LocationProvider, удовлетворяющие заданным  крите- риям. Как и в случае с getBestProvider, если ни один из источников не будет найден, возвращается null.

List<String> matchingProviders = locationManager.getProviders(criteria, false);

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии