Я создал небольшое приложение с пошаговым описанием, чтобы получить координаты GPS текущего местоположения.
Полный пример исходного кода находится в координатах Get Current Location, название города - в Android .
Посмотри, как это работает:
Все, что нам нужно сделать, это добавить это разрешение в файл манифеста:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
И создайте экземпляр LocationManager следующим образом:
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Проверьте, включен ли GPS или нет.
А затем реализовать LocationListener и получить координаты:
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
Вот пример кода для этого
/*---------- Listener class to get coordinates ------------- */
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
editLocation.setText("");
pb.setVisibility(View.INVISIBLE);
Toast.makeText(
getBaseContext(),
"Location changed: Lat: " + loc.getLatitude() + " Lng: "
+ loc.getLongitude(), Toast.LENGTH_SHORT).show();
String longitude = "Longitude: " + loc.getLongitude();
Log.v(TAG, longitude);
String latitude = "Latitude: " + loc.getLatitude();
Log.v(TAG, latitude);
/*------- To get city name from coordinates -------- */
String cityName = null;
Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(loc.getLatitude(),
loc.getLongitude(), 1);
if (addresses.size() > 0) {
System.out.println(addresses.get(0).getLocality());
cityName = addresses.get(0).getLocality();
}
}
catch (IOException e) {
e.printStackTrace();
}
String s = longitude + "\n" + latitude + "\n\nMy Current City is: "
+ cityName;
editLocation.setText(s);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
adresses
строке только один адрес, начинающийся с,cityName =
произойдет сбой с исключением. Использование скобок это исправит.getLastKnownLocation()
что это более "несвежее" место - почему это? Разве звонкиgetLastKnownLocation()
не получают последние GPS-чтения телефона GPS?Вот дополнительная информация для других ответов.
Поскольку Android имеет
Вы можете зарегистрироваться в обоих и начать получать события
onLocationChanged(Location location)
из двух одновременно. Все идет нормально. Теперь вопрос, нужны ли нам два результата или мы должны взять лучшее. Как я знаю,GPS_PROVIDER
результаты имеют лучшую точность, чемNETWORK_PROVIDER
.Определим
Location
поле:Прежде чем мы начнем прослушивать Изменение местоположения, мы реализуем следующий метод. Этот метод возвращает последнее известное местоположение между GPS и сетью. Для этого метода новее лучше.
Каждый раз, когда мы получаем новое местоположение, мы сравниваем его с нашим предыдущим результатом.
Я добавляю новый метод для
onLocationChanged
:источник
private Location currentBestLocation = null;
и добавьте `makeUseOfNewLocation (location);` к методу onLocationChanged (..)Вы можете найти местоположение либо по
GPS_PROVIDER or NETWORK_PROVIDER
.Обзор услуг определения местоположения в Android.
Вот один пример, который пытается найти местоположение с помощью GPS. Если ваш GPS недоступен, попробуйте использовать сеть для поиска местоположения.
GPSTracker.java
Activity -AndroidGPSTrackingActivity.java
Layout- main.xml
AndroidManifest.xml
источник
Там уже есть много ответов, но я хочу показать последний способ определения местоположения с помощью Google API, чтобы новые программисты могли использовать новый метод:
Я написал подробное руководство по текущему местоположению в Android на моем блоге demonuts.com Вы также можете найти полный исходный код, разработанный с помощью Android Studio.
Прежде всего, поместите это в файл Gradle
затем реализовать необходимые интерфейсы
объявлять случаи
положить это в
onCreate()
Наконец, переопределите необходимые методы
Не забудьте запустить GPS на вашем устройстве перед запуском приложения.
источник
mLocation
всегда дает ноль. Я попробовал так же, как упомянутоcompile 'com.google.android.gms:play-services-location:11.0.4'
вместо добавления всех служб Google Play в свое приложение.Поскольку мне не понравился код из других ответов, вот мое простое решение. Это решение предназначено для использования в деятельности или службе для отслеживания местоположения. Он гарантирует, что никогда не вернет слишком устаревшие данные, если вы явно не запросите устаревшие данные. Он может быть запущен либо в режиме обратного вызова, чтобы получать обновления по мере их поступления, либо в режиме опроса для опроса самой последней информации.
Общий интерфейс LocationTracker. Позволяет нам иметь несколько типов трекеров местоположения и легко подключать соответствующий:
ProviderLocationTracker - этот класс будет отслеживать местоположение для GPS или NETWORK.
Это FallbackLocationTracker, который будет отслеживать как GPS, так и NETWORK, и использовать любое местоположение, более точное.
Поскольку оба реализуют интерфейс LocationTracker, вы можете легко передумать, какой использовать. Чтобы запустить класс в режиме опроса, просто вызовите start (). Чтобы запустить его в режиме обновления, вызовите start (Listener).
Также взгляните на мой пост в блоге по коду
источник
FallbackLocationTracker fallbackLocationTracker = new FallbackLocationTracker(mContext); fallbackLocationTracker.start(); if (fallbackLocationTracker.hasLocation()) { return fallbackLocationTracker.getLocation(); }
Получить местоположение GPS по -
источник
location.getSpeed()
возвращает скорость в метре / сек (не метре / мин).Вы должны использовать последние / новейшие
В основном, что вам нужно сделать, это:
затем
для наиболее точного и надежного местоположения. Смотрите мой пост здесь:
https://stackoverflow.com/a/33599228/2644905
Не используйте LocationListener, который не является точным и имеет задержку ответа. Если честно, это легче реализовать. Также ознакомьтесь с документацией: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.
источник
Я надеюсь, что это поможет вам...
источник
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Теперь, когда сервисы определения местоположения в Google Play уже здесь, я рекомендую разработчикам начать использовать нового провайдера. Вам будет проще и точнее пользоваться. Пожалуйста, посмотрите видео Google I / O Beyond the Blue Dot: новые функции в Android Location от двух парней, которые создали новый API сервисов определения местоположения Google Play.
Я работал с API определения местоположения на многих мобильных платформах, и я думаю, что эти два парня действительно революционны. Он избавился от огромного количества сложностей использования различных провайдеров. Переполнение стека изобилует вопросами о том, какого поставщика использовать, использовать ли последнее известное местоположение, как установить другие свойства в LocationManager и т. Д. Этот новый API, который они создали, устраняет большинство этих неопределенностей и делает службы определения местоположения удовольствием использовать.
Я написал приложение для Android, которое периодически получает местоположение, используя службы определения местоположения Google Play, и отправляет это местоположение на веб-сервер, где оно хранится в базе данных и может быть просмотрено в Google Maps . Я написал как клиентское программное обеспечение (для Android, iOS, Windows Phone и Java ME ), так и серверное программное обеспечение (для ASP.NET и SQL Server или PHP и MySQL ). Программное обеспечение написано на родном языке для каждой платформы и работает в фоновом режиме на каждой. Наконец, программное обеспечение имеет лицензию MIT . Вы можете найти клиент Android здесь:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
источник
Проще всего найти
источник
LocationManager - это класс, который предоставляет встроенные методы для получения последнего известного местоположения
LocationManager locationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);
Есть два типа провайдера GPS и сети
Если объект location имеет значение null, не пытайтесь вызывать метод ниже s
getLatitude and getLongitude is methods which returns double values
источник
Получение обновлений местоположения требует большого количества кода болееров в Android, вам нужно позаботиться о
Чтобы облегчить все эти шаги, я создал Android-EasyLocation (небольшая библиотека Android) которая позаботится обо всем этом, и вы сможете сосредоточиться на бизнес-логике.
Все, что вам нужно, это расширить EasyLocationActivity и это
или
Пример приложения для заказа и необходимые шаги здесь по адресу https://github.com/akhgupta/Android-EasyLocation
источник
Я сделал проект, из которого мы можем получить точное местоположение с помощью Google Play Services, GPS и сетевых провайдеров. Этот проект можно найти здесь .
Стратегия поиска наилучшего местоположения заключается в том, чтобы сначала получить местоположение из сервисов Google Play, если местоположение найдено, затем проверить, лучше ли оно или нет, если найденное местоположение пусто, перезапустите сервисы Google Play и попробуйте получить местоположение из Android Location API. Зарегистрируйте местоположение на слушателях изменений, и когда когда-либо будет найдено лучшее местоположение, обратный вызов возвращает его в основное действие.
Он очень прост в использовании и реализации в коде только два класса , мы должны внедрить ИЭ
LocationManagerInterface
иSmartLocationManager
,LocationActivity
реализуют интерфейс и использование SmartLocationManager для извлечения местоположения.вот класс менеджера локаций
мы можем использовать это с активностью или фрагментом, здесь я использую это с активностью
Надеюсь, это поможет, если вы можете предложить какие-либо улучшения, пожалуйста, напишите об этом на git . Спасибо.
источник
В GoogleSamples есть подробный пример с использованием последней версии FusedLocationProviderApi. К сожалению, большинство проголосовавших ответов устарели.
Следуйте приведенным ниже примерам для реализации сервисов определения местоположения с использованием FusedLocationProviderApi
https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates
https://github.com/googlesamples/android-play-location/blob/master/LocationUpdates/app/src/main/java/com/google/android/gms/location/sample/locationupdates/MainActivity.java
источник
Если вы создаете новые локационные проекты для Android, вы должны использовать новый Google Play местоположения в . Это намного точнее и намного проще в использовании.
Я работаю над проектом GPS трекера с открытым исходным кодом , GpsTracker, в течение нескольких лет. Я недавно обновил его для обработки периодических обновлений с мобильных телефонов Android, iOS, Windows Phone и Java ME . Он полностью функционален и делает то, что вам нужно, и имеет лицензию MIT .
Проект Android в GpsTracker использует новые сервисы Google Play, а также есть два серверных стека ( ASP.NET и PHP ), которые позволяют отслеживать эти телефоны.
источник
Для проверки местоположения вы можете использовать следующий код. Вы можете поместить его в свой onStart () основного действия и отобразить диалоговое окно с предупреждением, если return имеет значение false.
источник
Я получил очень точное местоположение с помощью FusedLocationProviderClient
( требуются сервисы Google Play )
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
'Com.google.android.gms: игры-сервисы Откуда: 15.0.0'
источник
Лучший способ получить местоположение ниже
источник
Я опубликовал небольшую библиотеку, которая позволяет легко получать данные о местоположении в Android, она даже заботится о разрешениях Android M во время выполнения.
Вы можете проверить это здесь: https://github.com/julioromano/RxLocation и использовать его или его исходный код в качестве примеров для вашей реализации.
источник
Простой код поиска записи в методе определения местоположения
источник
Я рекомендую использовать Smart Location Library
Очень проста в использовании, и она хорошо оборачивает логику расположения.
Для запуска службы определения местоположения:
Если вы просто хотите получить одно местоположение (не периодическое), вы можете просто использовать модификатор oneFix. Пример:
источник
Простой и легкий способ,
Получить местоположение с помощью https://github.com/sachinvarma/EasyLocation .
Шаг 1: Просто позвоните
временной интервал -> setInterval (long) (inMilliSeconds) означает - установить интервал, в котором вы хотите получить местоположения.
fastestTimeInterval -> setFastestInterval (long) (inMilliSeconds) означает - если местоположение доступно раньше, вы можете его получить. (т.е. другое приложение использует службы определения местоположения).
runAsBackgroundService = True -> (Служба будет работать в фоновом режиме и часто обновляется (в соответствии с timeInterval и fastestTimeInterval)) runAsBackgroundService = False -> (Служба getDestroyed после успешного обновления местоположения)
Шаг 2: Подготовьте подписчиков EventBus: объявите и аннотируйте свой метод подписки, при желании укажите режим потока:
например:
Это все.
Надеюсь, это поможет кому-то в будущем.
источник
Апрель 2020
Полные шаги, чтобы получить текущее местоположение, и избежать обнуляемости последнего известного местоположения.
Согласно официальной документации , последнее известное местоположение может быть нулевым в случае:
В этом случае вам необходимо requestLocationUpdates и получить новое местоположение в LocationCallback .
Следующими шагами ваше последнее известное местоположение никогда не будет нулевым.
Предварительное условие : библиотека EasyPermission
Шаг 1: В файле манифеста добавьте это разрешение
Шаг 2:
Шаг 3: Создайте необходимые функции для вызова в onCreate ()
Шаг 4:
Обработайте обратные вызовы в onActivityResult () после того, как убедитесь, что местоположение открыто или пользователь принимает его.
Шаг 5: Получить последнее известное местоположение из FusedClientApi
Я надеюсь, что это поможет.
Счастливое кодирование 🤓
источник