Location provider что это за программа

Android: LocationManager против Google Play Services

Я хочу создать приложение, которое будет ориентировано на получение текущего местоположения пользователя, а затем находить точки интереса (например, бары, рестораны и т. Д.), Которые находятся рядом с ним через API Google Адресов .

После поиска в Интернете места для начала я наткнулся на некоторые учебные пособия, в которых используется этот LocationManager класс, и некоторые другие, в которых используются службы Google Play , чтобы найти местоположение пользователей.

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

Каковы различия между этими двумя методами поиска местоположений (если они есть)?

Посетите здесь stackoverflow.com/questions/21397177/…

Расположение пользователя на Android

Получить местоположение пользователя на Android немного проще, чем на iOS. Чтобы начать путаницу, есть два совершенно разных способа сделать это. Первый использует API-интерфейсы Android от android.location.LocationListener , а второй использует API-интерфейсы Google Play Services com.google.android.gms.location.LocationListener . Давайте пройдем через них обоих.

Приложение GPS трекер / Часть 1/ Android Studio курс

  1. Android Location API API определения местоположения Android используют три разных провайдера для определения местоположения —
    • LocationManager.GPS_PROVIDER — Этот провайдер определяет местоположение с помощью спутников. В зависимости от условий этому провайдеру может потребоваться некоторое время для возврата местоположения.
    • LocationManager.NETWORK_PROVIDER — Этот провайдер определяет местоположение в зависимости от наличия сотовой вышки и точек доступа WiFi. Результаты извлекаются с помощью поиска в сети.
    • LocationManager.PASSIVE_PROVIDER — Этот провайдер возвращает местоположения, созданные другими провайдерами. Вы пассивно получаете обновления местоположения, когда другие приложения или службы запрашивают их, фактически не запрашивая местоположения самостоятельно.

    Суть в том, что вы получаете объект LocationManager из системы, реализуете LocationListener и вызываете requestLocationUpdates его LocationManager .

    Вот фрагмент кода:

    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() public void onLocationChanged(Location location) // Called when a new location is found by the network location provider. makeUseOfNewLocation(location); > public void onStatusChanged(String provider, int status, Bundle extras) <> public void onProviderEnabled(String provider) <> public void onProviderDisabled(String provider) <> >; // Register the listener with the Location Manager to receive location updates locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

    Руководство Google API по стратегиям размещения объясняет код довольно красиво. Но они также отмечают, что в большинстве случаев вы получите лучшую производительность батареи, а также более подходящую точность, используя API Google Location Services вместо этого . Теперь путаница начинается!

    Удали! 💢 Эти два системных приложения телефона являются рекламными агентами браузера в телефоне.

    Google Location Services API является частью Google Play Services APK ( вот как его настроить ). Они построены на основе Android API. Эти API предоставляют «провайдера объединенного местоположения» вместо провайдеров, упомянутых выше. Этот провайдер автоматически выбирает, какого основного провайдера использовать, основываясь на точности, использовании батареи и т. Д. Это происходит быстро, потому что вы получаете местоположение из общесистемной службы, которая постоянно обновляет ее. И вы можете использовать более продвинутые функции, такие как геозоны.

    Чтобы использовать Google Location Services, ваше приложение должно подключиться к GooglePlayServicesClient . Чтобы подключиться к клиенту, ваша деятельность (или фрагмент, или около того) должны быть реализованы GooglePlayServicesClient.ConnectionCallbacks и GooglePlayServicesClient.OnConnectionFailedListener интерфейсы. Вот пример кода:

    • Почему locationClient.getLastLocation() ноль?

    locationClient.getLastLocation() Получает последнее известное местоположение от клиента. Однако провайдер локализованного местоположения будет поддерживать фоновое местоположение, только если к нему подключен хотя бы один клиент. Как только первый клиент подключится, он сразу попытается найти местоположение. Если ваша деятельность является первым клиентом для подключения и вы звоните getLastLocation() сразу в onConnected() , что не может быть достаточно времени для первого места , чтобы войти. Это приведет к location быть null .

    Чтобы решить эту проблему, вы должны ждать (неопределенно), пока провайдер не определит местоположение, а затем позвонить getLastLocation() , что невозможно узнать. Другой (лучший) вариант — реализовать com.google.android.gms.location.LocationListener интерфейс для получения периодических обновлений местоположения (и отключить его, как только вы получите первое обновление).

    В этом коде вы проверяете, есть ли у клиента последнее местоположение (in onConnected ). Если нет, вы запрашиваете обновления местоположения и отключаете запросы (в режиме onLocationChanged() обратного вызова), как только вы получаете обновление.

    Обратите внимание, что locationClient.requestLocationUpdates(locationRequest, this); он должен быть внутри onConnected обратного вызова, иначе вы получите запрос, IllegalStateException потому что вы будете пытаться запрашивать местоположения, не подключенные к клиенту Google Play Services.

    • Пользователь отключил Службы определения местоположения

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

    Если ваше приложение требует, чтобы они включили службы определения местоположения, вы хотели бы показать сообщение или тост. К сожалению, нет способа проверить, отключил ли пользователь службы определения местоположения в API служб определения местоположения Google. Для этого вам придется прибегнуть к API Android.

    В вашем onCreate методе:

    LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) !manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) locationEnabled = false; Toast.makeText(getActivity(), «Enable location services for accurate data», Toast.LENGTH_SHORT).show(); > else locationEnabled = true;

    И используйте locationEnabled флаг в вашем onConnected методе так:

    if (location != null) Toast.makeText(getActivity(), «Location: » + location.getLatitude() + «, » + location.getLongitude(), Toast.LENGTH_SHORT).show(); > else if (location == null locationEnabled) locationClient.requestLocationUpdates(locationRequest, this); >

    ОБНОВИТЬ

    Документ обновлен, LocationClient удален, и API поддерживает включение GPS одним щелчком мыши из диалогового окна:

    Новый клиент местоположения: FusedLocationProviderClient

    Читайте также:
    Infopath designer что это за программа

    Рекомендуется пройти через https://developer.android.com/training/location перед выполнением каких-либо задач определения местоположения.

    Вы можете использовать, SettingsApi.checkLocationSettings() чтобы проверить, активировал ли пользователь Службы определения местоположения (см. Здесь: developers.google.com/android/reference/com/google/android/gms/… ).

    LocationClient больше не существует. Обновленное и понятное руководство по местоположению можно найти в этой статье: blog.teamtreehouse.com/beginners-guide-location-android

    И учебная страница с примером SettingsApi: developer.android.com/training/location/…

    Вы также можете создать геозону используя LocationManager ! Работает ли API-интерфейс fused location на устройствах без сервисов Google Play?

    Это может быть еще один лучший способ проверить состояние включения / выключения GPS fun isLocationEnabled(context: Context): Boolean < val locationMode: Int try < locationMode = Settings.Secure.getInt( context.contentResolver, Settings.Secure.LOCATION_MODE ) >catch (e: SettingNotFoundException) < e.printStackTrace() return false >return locationMode != Settings.Secure.LOCATION_MODE_OFF >

    По моему опыту, «более подходящая точность» никоим образом не значит лучше. Если вы не пропустили что-то, если вы хотите убедиться, что GPS используется, LocationManager — единственный путь. Мы отслеживаем транспортные средства с помощью нашего приложения, и, опять же, если я что-то упускаю, Сервисы Google Play довольно часто предоставляют некоторые неточные местоположения.

    Источник: qastack.ru

    Android
    Место нахождения

    API Android Location используются в самых разных приложениях для различных целей, таких как поиск местоположения пользователя, уведомление о том, когда пользователь покинул общую область (Geofencing), и помочь интерпретировать активность пользователя (ходьба, работа, вождение и т. Д.).

    Однако API-интерфейсы Android не являются единственным средством приобретения местоположения пользователя. Ниже приводятся примеры использования Android LocationManager и других распространенных библиотек местоположений.

    замечания

    Для создания приложений с поддержкой местоположения на Android существует два пути:

    • Исходный исходный код LocationManager Android
    • Google FusedLocationProviderApi , входящий в состав Google Play Services

    LocationManager

    Pros

    • Более гранулированный контроль
    • Доступно на всех устройствах
    • Часть платформы Android

    Cons

    • Слив батареи — проблема, если ее не управляют должным образом
    • Требуется логика для переключения поставщиков местоположения, если устройство не может найти местоположение (например, плохой GPS внутри здания)

    Характеристики

    • Приемник NMEA
    • Приемник состояния GPS
    • Слушайте изменения статуса поставщика (например, GPS отключается пользователем)
    • Список поставщиков для выбора источника местоположения

    Провайдеры

    GPS

    • Необходимые разрешения:
    • ACCESS_FINE_LOCATION
    • Обновления местоположения обычно поступают один раз в секунду, но в ситуациях, когда GPS не используется в течение некоторого времени, и A-GPS недоступен, для получения местоположения требуется несколько минут.
    • В тех случаях, когда затруднено четкое представление о небе, точки GPS не будут группироваться очень хорошо (точки места «прыгать»), и точность может вводить в заблуждение в определенных областях из-за эффекта « Городской каньон ».

    сеть

    • Необходимые разрешения:
    • ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION
    • Обновления местоположения происходят реже, чем GPS
    • Обновления местоположения обычно не кластеризуются (точки места «прыгать»), и точность может варьироваться в зависимости от количества различных факторов (количество сигналов Wi-Fi, уровень сигнала, тип ячейки башни и т. Д.),

    пассивный

    • Необходимые разрешения:
    • ACCESS_FINE_LOCATION
    • Не полагайтесь на это, чтобы постоянно обновлять его. Это пассивно слушает другие приложения, которые делают запросы на местоположение, и передает их обратно.
    • Не возвращает FagedLocationProviderApi сгенерированные точки, только базовые точки местоположения, используемые для их создания.

    FusedLocationProviderApi

    Pros

    • Предлагает меньше разряда аккумулятора «из коробки»
    • Обрабатывает плохой GPS-приемник
    • Получает обновления более регулярно

    Cons

    • Менее детальный контроль над GPS
    • Может быть недоступен на всех устройствах или в некоторых странах
    • Требуется зависимость сторонней библиотеки

    Характеристики

    • Хорошо управляемое использование поставщиков местоположения для оптимальной экономии тесто
    • Обычно генерирует более точные точки, а затем Network Location Provider
    • Более частые обновления библиотеки, позволяющие улучшить
    • Нет необходимости указывать, какой тип поставщика использовать

    Приоритетные уровни местоположения

    PRIORITY_HIGH_ACCURACY

    • Необходимые разрешения:
    • ACCESS_FINE_LOCATION для более точного местоположения или ACCESS_COARSE_LOCATION для менее точного местоположения
    • Если ACCESS_FINE_LOCATION не используется, это не будет использовать GPS для генерации обновлений местоположения, но все равно найдет довольно точную точку в правильных условиях.
    • Если ACCESS_FINE_LOCATION используется, он может или не может использовать GPS для создания точек местоположения, в зависимости от того, насколько точно он может отслеживать устройство в соответствии с условиями окружающей среды.
    • Хотя это может сообщать о более точном обновлении местоположения, чем другие настройки, оно все еще подвержено эффекту « Городской каньон ».

    PRIORITY_BALANCED_POWER_ACCURACY

    • Необходимые разрешения:
    • ACCESS_FINE_LOCATION для более точного местоположения или ACCESS_COARSE_LOCATION для менее точного местоположения
    • Такие же заметки, как PRIORITY_HIGH_ACCURACY
    • Хотя это маловероятно, этот параметр может по-прежнему использовать GPS для создания местоположения.

    PRIORITY_LOW_POWER

    • Необходимые разрешения:
    • ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION
    • Вероятно, он не использует GPS, но пока не проверен.
    • Обновления обычно не очень точны
    • Обычно используется для обнаружения значительных изменений в местоположении

    PRIORITY_NO_POWER

    • Необходимые разрешения:
    • ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION
    • Функции почти идентичны с LocationManager PASSIVE_PROVIDER
    • PASSIVE_PROVIDER отчеты об обновлениях Служб Google Play, когда PASSIVE_PROVIDER сообщает о возвращенных базовых обновлениях местоположения

    Поиск проблемы

    OnLocationChanged () никогда не вызывается

    Поскольку это, похоже, является общей проблемой при получении Android Locations, я изложу быстрый контрольный список общих исправлений:

    1. Проверьте свой манифест! Одна из наиболее распространенных проблем заключается в том, что правильные разрешения никогда не предоставлялись. Если вы используете GPS (с сетью или без нее), используйте use , иначе используйте , Для FuseLocationApi от Google требуется ACCESS_FINE_LOCATION .
    1. (Для Android 6+) Проверьте разрешения во время выполнения ! Проверьте и запросите разрешения! Если вам никогда не дадут разрешения, вы столкнетесь с аварийными ситуациями или, что еще хуже (если вы поймаете все исключения), вы ничего не увидите! Не имеет значения, предоставит ли пользователь разрешение в начале приложения, всегда проверяйте, есть ли у вас разрешения для всех вызовов. Пользователь может легко перейти к своим настройкам и отозвать их.
    1. Дважды проверьте свой код! Вы уверены, что проходите в правом слушателе? IntentService ли вы, что BroadcastReceiver или IntentService к вашему манифесту? Используете ли вы PendingIntent.getService() в классе BroadcastReceiver или getBroadcast() в классе IntentService ? Вы уверены, что не регистрируете своего слушателя где-то еще в своем коде сразу после запроса?
    1. Проверьте настройки устройства! Очевидно, убедитесь, что вы включили службы определения местоположения. Если вы используете сетевые службы, включили ли вы «Сканирование всегда доступно»? У вас установлен режим «Лучшее» («Высокая точность») или «Аккумуляторная батарея» (только для сети)? Если вы используете GPS, включили ли вы режим «Лучшее» («Высокая точность») или «Только устройство» в режиме местоположения?
    1. Дважды проверьте свой код! Да, это здесь дважды. Вы пытались использовать LocationListener вместо PendingIntent или наоборот, чтобы убедиться, что вы действительно реализовали LocationManager правильно? Вы уверены, что запрос местоположения не удаляется в какой-либо части жизненного цикла Activity или Service, который вы не ожидали?
    1. Проверьте свое окружение! Вы тестируете GPS на первом этаже здания в центре Сан-Франциско? Проверяете ли вы сетевые местоположения в середине нигде? Вы работаете в секретном подземном бункере, лишенном всех радиосигналов, удивляясь, почему ваше устройство не получает место? Всегда проверяйте свое окружение, пытаясь устранить проблемы с местоположением!
    Читайте также:
    Abbyy comparaTor что это за программа

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

    API с плавающим местоположением

    Пример использования активности w / LocationRequest

    Пример использования службы с ожиданием и трансляцией

    ExampleActivity

    Служба определения местоположения

    ПРИМЕЧАНИЕ. Не забудьте зарегистрировать эту службу в манифесте!

    LocationReceiver

    ПРИМЕЧАНИЕ. Не забудьте зарегистрировать этот приемник в манифесте!

    Запрос обновлений местоположения с помощью LocationManager

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

    Запрос обновлений местоположения в отдельном потоке с помощью LocationManager

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

    Зарегистрировать геозонность

    Я создал GeoFenceObserversationService одноэлементный класс.

    GeoFenceObserversationService.java :

    AppConstant :

    public static final String SHARED_PREFERENCES_NAME = PACKAGE_NAME + «.SHARED_PREFERENCES_NAME»; public static final String GEOFENCES_ADDED_KEY = PACKAGE_NAME + «.GEOFENCES_ADDED_KEY»; public static final String DETECTED_GEOFENCES = «detected_geofences»; public static final String DETECTED_BEACONS = «detected_beacons»; public static String getErrorString(Context context, int errorCode) < Resources mResources = context.getResources(); switch (errorCode) < case GeofenceStatusCodes.GEOFENCE_NOT_AVAILABLE: return mResources.getString(R.string.geofence_not_available); case GeofenceStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES: return mResources.getString(R.string.geofence_too_many_geofences); case GeofenceStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS: return mResources.getString(R.string.geofence_too_many_pending_intents); default: return mResources.getString(R.string.unknown_geofence_error); >>

    Где я начал службу? Из класса приложения

    • startService(new Intent(getApplicationContext(),GeoFenceObserversationService.class));

    Как я зарегистрировал Geofences?

    • GeoFenceObserversationService.getInstant().addGeofences();

    Получить адрес из местоположения с помощью геокодирования

    После того, как вы получили объект Location из FusedAPI , вы можете легко получить Address информацию от этого объекта.

    private Address getCountryInfo(Location location) < Address address = null; Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault()); String errorMessage; Listaddresses = null; try < addresses = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), // In this sample, get just a single address. 1); >catch (IOException ioException) < // Catch network or other I/O problems. errorMessage = «IOException>>» + ioException.getMessage(); > catch (IllegalArgumentException illegalArgumentException) < // Catch invalid latitude or longitude values. errorMessage = «IllegalArgumentException>>» + illegalArgumentException.getMessage(); > if (addresses != null !addresses.isEmpty()) < address = addresses.get(0); >return country; >

    Получение обновлений местоположения в BroadcastReceiver

    Сначала создайте класс BroadcastReceiver для обработки входящих обновлений местоположения:

    Затем, когда вы подключаетесь к GoogleApiClient в обратном вызове onConnected:

    Не забудьте удалить намерение обновления местоположения в соответствующем обратном вызове жизненного цикла:

    Modified text is an extract of the original Stack Overflow Documentation
    Лицензировано согласно CC BY-SA 3.0
    Не связан с Stack Overflow

    Источник: learntutorials.net

    Fused Location Provider API

    Получите данные о местоположении для вашего приложения на основе комбинированных сигналов от датчиков устройства с помощью API с эффективным расходом заряда батареи.

    Эта страница переведена с помощью Cloud Translation API.

    Отправить отзыв Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

    Простой и экономичный API определения местоположения для Android

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

    Поставщик объединенного местоположения — это API определения местоположения в сервисах Google Play, который интеллектуально объединяет различные сигналы для предоставления информации о местоположении, необходимой вашему приложению.

    Поставщик объединенного определения местоположения управляет базовыми технологиями определения местоположения, такими как GPS и Wi-Fi, и предоставляет простой API, который можно использовать для указания требуемого качества обслуживания. Например, вы можете запросить самые точные доступные данные или максимально возможную точность без дополнительного энергопотребления.

    Поддержка распространенных сценариев местоположения

    Последнее известное местоположение

    Используя API-интерфейс провайдера объединенного местоположения, ваше приложение может запросить последнее известное местоположение устройства пользователя. Получение последнего известного местоположения обычно является хорошей отправной точкой для приложений, которым требуется информация о местоположении.

    Настройки местоположения

    При запросе информации о местоположении используется множество различных источников местоположения, таких как GPS и Wi-Fi. Принятие решения о том, какие источники использовать, может быть сложной задачей, но API-интерфейс провайдера объединенного местоположения устраняет догадки, автоматически изменяя соответствующие системные настройки. Все, что должно сделать ваше приложение, — указать желаемый уровень обслуживания.

    Обновления местоположения

    В дополнение к последнему известному местоположению API-интерфейс провайдера объединенного местоположения может доставлять обновления местоположения для обратного вызова в вашем приложении через определенные промежутки времени. Вы можете указать желаемый интервал в качестве параметра качества обслуживания. Используя обновления местоположения, ваше приложение может предоставить дополнительную информацию, такую ​​как направление и скорость.

    Источник: developers.google.com

    Русские Блоги

    GPS — это сокращение от английской системы глобального позиционирования (Global Positioning System). GPS был совместно разработан армией США, ВВС и ВВС в 1970-х годах.

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

    Для военных целей, таких как сбор разведывательных данных, мониторинг ядерного взрыва и связь в чрезвычайных ситуациях, после более чем 20 лет исследований и экспериментов это обошлось в 30 млрд. Долл. США.

    Было развернуто 24 спутниковых группировки GPS со скоростью до 98%.

    Принцип позиционирования GPS

    Основной принцип определения местоположения GPS состоит в том, чтобы использовать мгновенное положение высокоскоростных спутников в качестве известных начальных данных и использовать метод пространственного пересечения для определения теста.

    Расположение точки. Как показано на рисунке, если GPS-приемник находится на земле для измерения в момент времени t, время измерения GPS-сигнала на приемнике может быть измерено, плюс

    (Эфемериды спутника и другие данные, полученные приемником, могут определить следующие четыре уравнения)

    Базовый класс GPS

    Платформа Android предоставляет пакет android.location с 8 классами.Основные 3 класса:

    Класс LocationManager: роль аналогична классу WifiManager, TelephonyManager и других классов обслуживания.

    Все объекты создаются этим объектом.

    Класс LocationProvider: поставщик позиционирования, абстрактное представление компонента позиционирования GPS.Этот объект может получить соответствующую информацию о компоненте позиционирования.

    Класс местоположения: абстрактный класс, представляющий информацию местоположения.

    Читайте также:
    Использовать vpn что это за программа

    Основные шаги по их использованию для получения информации о позиционировании GPS:

    Получить системный объект LocationManager

    Используйте LocationManager для получения информации о местоположении Location через указанное устройство местоположения LocationProvider.

    Получить информацию о местоположении от объекта Location

    LocationManager

    Получение объекта LocationManager:

    LocationManager lm= (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    Общие методы

    List getAllProviders () Получить список всех LocationProviders

    LocationProvider getProvider (имя строки)

    List getProviders (boolean enabledOnly) Получить все доступные LocationProviders

    List getProviders(Criteria criteria, boolean enabledOnly) Получить имена всех LocationProviders, которые соответствуют указанным условиям в соответствии с указанными условиями

    String getBestProvider(Criteria criteria, boolean enabledOnly) Возвращает оптимальный объект LocationProvider в соответствии с указанными условиями

    boolean isProviderEnabled (поставщик строк) Определяет, доступен ли LocationProvider с указанным именем

    Местоположение getLastKnownLocation (поставщик строк) Получить последнее известное местоположение

    addProximityAlert (двойная широта, двойная долгота, радиус плавания, длительный срок действия, намерение PendingIntent): добавить подход

    void removeProximityAlert (намерение PendingIntent)

    void requestLocationUpdates(long minTime, float minDistance, Criteria criteria, PendingIntent intent)

    void requestLocationUpdates (строковый поставщик, long minTime, float minDistance, слушатель LocationListener)

    LocationProvider периодически получает информацию о местоположении и запускает соответствующий компонент через намерение

    void requestLocationUpdates (строковый поставщик, long minTime, float minDistance, намерение PendingIntent)

    LoctionProvider периодически получает информацию о местоположении и запускает соответствующий компонент через намерение

    LocationProvider (поставщик местоположения)

    abstract int getAccuracy () возвращает точность этого LocationProvider

    String getName () Возвращает имя этого LocationProvider.

    int getPowerRequirement () Получает требования к питанию этого AuctionProvider

    boolean hasMonetaryCost () Получите, является ли LocationProvider платным или бесплатным

    boolean meetCriteria (критерии критериев) определяет, соответствует ли LocationProvider критериям критериев

    boolean requireCell () определяет, нужен ли LocationProvider для доступа к базовой станции сети

    boolean требует Network (), чтобы определить, нужен ли LocationProvider для доступа к сетевым данным

    boolean requiredSatell (), чтобы определить, нужен ли AuctionProvider для доступа к спутниковой системе позиционирования

    boolean supportsAltitude (), чтобы определить, поддерживает ли AuctionProvider информацию о высоте

    boolean supportBearing () определяет, поддерживает ли LocationProvider информацию о направлении

    boolean supportsSpeed ​​() Определяет, поддерживает ли AuctionProvider информацию о скорости

    Местоположение (информация о местоположении)

    float getAccuracy () Получить точность информации о позиционировании

    double getAltitude () Получить высоту информации о местоположении

    float getBearing () Получить направление информации о позиционировании

    double getLatitude () Получить широту информации о местоположении

    double getLongitude () Получить долготу информации о местоположении

    String getProvider () Получает LocationProvider, который предоставляет информацию о местоположении

    float getSpeed ​​() Получить информацию о скорости позиционирования

    boolean hasAccuracy () определяет, имеет ли информация о местоположении информацию о точности

    boolean hasAltitude () определяет, имеет ли информация о местоположении информацию о высоте

    boolean hasBearing () определяет, имеет ли информация о местоположении информацию о направлении

    boolean hasSpeed ​​() определяет, имеет ли информация о местоположении информацию о скорости

    Получить информацию о местоположении

    1 Получить все доступные LocationProviders

    LocationManager предоставляет метод getAllProvider () для получения всех доступных LocationProviders в системе

    В системе есть три типа LocationProvider

    сеть: представлена ​​константой LocationManager.NETWORK_PROVIDER

    gps : Представлено константой LocationManager.GPS_PROVIDER

    пассивный: представлен константой AuctionManager.PASSIVE_PROVIDER

    2 Получить указанный getProvider (String name) по имени

    3 GetProviders (критерии критериев, логическое значение включено только) в соответствии с критериями

    Критерии: представляет условие «фильтра», предоставляет несколько методов для установки условий.

    void setAccuracy(int accuracy)

    void setAltitudeRequired(boolean altitudeRequired)

    void setBearingAccuracy(int accuracy)

    void setBearingRequired(boolean bearingRequired)

    После получения объекта LocationManager вы можете получить информацию о местоположении с помощью указанного LocationProvider, такую ​​как: долгота, широта, высота и скорость движения.

    Предупреждение о приближении

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

    Введите или выйдите из заданной области, чтобы запросить.

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

    широта долгота, долгота широта, радиус области радиуса, срок действия указывает, сколько миллисекунд истекает, -1 никогда не истек, PendingIntent относится к

    Компонент Intent, который срабатывает.

    Для этого необходимо выполнить два шага:

    Во-первых, получить экземпляр LocationManager, вызвать его метод addProximityalert и добавить подсказку подхода;

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

    Получить имена всех LocationProviders

    // Получить объект LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Получить имена всех LocationProviders List providerNames = mLocationManager.getAllProviders();
    Получить указанный LocationProvider по имени
    // Получаем LocationProvider на основе GPS LocationProvider locProvider = lm.getProvider(LocatinManager.GPS_PROVIDER)
    Получить LocationProvider в соответствии с критериями
    mProviders = (ListView) findViewById(R.id.providers); // Получить системный объект LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Создать условие фильтра для LocationProvider Criteria cri = new Criteria(); // Настройка требует, чтобы LocationProvider был свободен. cri.setCostAllowed(false); // Настройка требует LocationProvider для предоставления информации о высоте cri.setAltitudeRequired(true); // Настройка требует LocationProvider для предоставления информации о направлении cri.setBearingRequired(true); // Получить имена всех подходящих LocationProviders в системе List providerNames = mLocationManager.getProviders(cri, true);

    Получить данные о местоположении:

    Эта программа должна иметь доступ к сигналам GPS, поэтому вам необходимо добавить информацию об авторизации в файл AndroidManifest.xml.

    Используется для получения информации о местоположении из Location, включая долготу пользователя, широту, высоту, направление и скорость движения и т. Д., И задает ее с помощью LocationManager

    Слушатель, который отвечает за запрос информации о местоположении от LocationProvider каждые 3 секунды.

    Когда битовая информация изменяется, система перезвонит соответствующему методу для обновления интерфейса.

    Если программа совмещена с Google Map, пусть программа отображает положение пользователя на карте в режиме реального времени на основе информации, предоставленной GPS, и можно разработать систему навигации GPS

    // Менеджер службы определения местоположения объекта LocationManager locationManager; // Получить объект LocationManager с помощью метода getSystemService locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Определяем приблизительную долготу и широту здания 4 колледжа Ванли double longitude = 123.427109; double latitude = 41.764998; // определить радиус (2000 метров) float radius = 2000; // определить намерение Intent intent = new Intent(this, ProximityAlertReciever.class); // Wrap Intent as PendingIntent PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0); // добавить предупреждение о близости locationManager.addProximityAlert(latitude, longitude, radius, -1, pendingIntent);
    Соответствующий BroadcastReceiver запущен:

    Рассчитаем расстояние между двумя точками:

    final float[] results = new float[3]; Location.distanceBetween(20.123, 30.05644, 30.124, 40.543, results); final float bearing = results[1]; mEditText.setText (String.valueOf (results [0]) + «meter»);

    Источник: russianblogs.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru