- Android Location API to track your current location
- Android Tutorial
- Android Location API
- LocationListener
- Android Location API Project Structure
- Android Location APICode
- Как я искал свой телефон с помощью Android Device Manager
- Данные о местоположении
- Примеры кода
- Работа с данными о местоположении
- Доступ к данным о местоположении
- Добавление разрешений в манифест приложения
- Запрос разрешений в среде выполнения
- Kotlin
- Слой «Мое местоположение»
- Kotlin
- Location API сервисов Google Play
Android Location API to track your current location
Android Tutorial
Android Location API can be used to track your mobile current location and show in the app. In this tutorial, we’ll develop an application that fetches the user’s current location programmatically.
Android Location API
There are two ways to get a users location in our application:
- android.location.LocationListener : This is a part of the Android API.
- com.google.android.gms.location.LocationListener : This is present in the Google Play Services API. (We’ll look into this in the next tutorial)
Android Location Services is available since Android API 1.
Google officially recommends using Google Play Location Service APIs. Android Location Services API is still used to develop location-based apps for devices that don’t support Google Play Services.
LocationListener
The LocationListener interface, which is part of the Android Locations API is used for receiving notifications from the LocationManager when the location has changed. The LocationManager class provides access to the systems location services.
The LocationListener class needs to implement the following methods.
- onLocationChanged(Location location) : Called when the location has changed.
- onProviderDisabled(String provider) : Called when the provider is disabled by the user.
- onProviderEnabled(String provider) : Called when the provider is enabled by the user.
- onStatusChanged(String provider, int status, Bundle extras) : Called when the provider status changes.
The android.location has two means of acquiring location data:
- LocationManager.GPS_PROVIDER: Determines location using satellites. Depending on the conditions, this provider may take a while to return a location fix
- LocationManager.NETWORK_PROVIDER: Determines location based on the availability of nearby cell towers and WiFi access points. This is faster than GPS_PROVIDER
In this tutorial, we’ll create a Service that implements the LocationListener class to receive periodic location updates via GPS Providers or Network Providers.
Android Location API Project Structure
The project consists of a MainActivity.java class which displays a Get Location and a LocationTrack.java Service class.
Android Location APICode
The activity_main.xml layout is defined below.
The MainActivity.java class is defined below.
In the above code, we’re implementing runtime permissions that are used in Android 6.0+ devices.
We’ve added the ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION permissions in the AndroidManifest.xml file.
Clicking the button invokes the LocationTrack.java service class. If the location returned is NULL in the case of GPS Provider, we call the showSettingsAlert() method from the LocationTrack.java class that we’ll be seeing shortly. When the activity is destroyed stopLocationTrack() method is called to turn off the location updates.
The LocationTrack.java class is defined below.
Few inferences drawn from the above code are:
- In the above code isProviderEnabled(String provider) is called upon the locationManager object and is used to check whether GPS/Network Provider is enabled or not.
- If the Providers aren’t enabled we’re calling the method showSettingsAlert() that shows a prompt to enable GPS.
- requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) method of the LocationManager class is used to register the current activity to be notified periodically by the named provider.
- onLocationChanged is invoked periodically based upon the minTime and minDistance, whichever comes first.
- Location class hosts the latitude and longitude.
To get the current location the following code snippet is used.
On the above Location object, getters are called to store the double values of latitude and longitude. These double values are then disabled as a Toast message on the screen.
The output of the above application in action on an emulator is:
Our emulators can’t fetch locations, hence it’s returning 0.0 for lat/lng. You can connect your smartphone and run the application in debug mode to check your current location.
To emulate GPS Locations in an emulator we can pass fixed Latitude and Longitude values from Android Studio. Besides the emulator window, you can see a list of options. The one at the bottom (which has three dots) is our Extended Controls options. Open that and send a dummy location. Your application should look like this:
This brings an end to this tutorial. We’ll be implementing Location API using Google Play Services in a later tutorial. You can download the Android GPSLocationTracking Project from the link below.
Источник
Как я искал свой телефон с помощью Android Device Manager
В прошлую пятницу, по пути домой, я бездарно посеял свой телефон в автобусе. Осознание этого печального факта пришло позже, когда я уже выходил из метро. Новый Nexus 4 терять очень жалко. К счастью я знал о нескольких программах, которые могут отслеживать местоположение телефона.
Прийдя домой, я первым делом попробовал включить Prey, но потом я вспомнил, что после рутования телефона я забыл активировать свой аккаунт.
После этого я попытался поставить Plan B, но тут меня ждал облом. Plan B работает только на старых версиях ОС.
Почти смирившись с потерей телефона я наткнулся на Android Device Manager ( www.google.com/android/devicemanager ). Это новая штуковина, которая может отслеживать ваш телефон и не требует сторонних программ. (Наверное работает только с 4.2, ниже я не проверял).
Телефон был обнаружен в автобусном депо. Чем чёрт не шутит, подумал я и поехал туда. Но найти телефон когда в депо сотня автобусов очень затруднительно. По крайней мере его никто не взял и он скорее всего окажется в бюро находок 🙂
Все выходные телефон находился в депо, и я начал думать, что это какой-то глюк, т.к. с зарядника я его снял в пятницу утром.
Сегодня, перед выездом на работу, я обнаружил его не в депо, а на крупной автобусной остановке. Когда я пришел на работу, телефон был уже в районе университета, через весь город. Его никто не нашел, и он продолжает ездить на автобусе. По крайней мере теперь задача упрощается.
Зная конечную и начальную остановки я опредилил номер маршрута. №49 — Metrotown — UBC.
После утренней планерки, отследив телефон еще несколько раз эта теория подвердилась.
Используя мобильный сайт, который показывает автобусы на карте в реальном времени ( nb.translink.ca/Map/Route/049/Trip/EB1 ) я смог вычислить номер самого автобуса.
После чего осталось всего ничего 🙂 Я позвонил в бюро находок компании Translink, и подробно рассказал им в каком конкретном автобусе нужно искать мой телефон, и сиденье, на котором он был посеян.
Оператор была сильно удивлена точностью моих данных, а автобус как раз подъезжал к конечной.
Через пять минут мне перезвонили, и сказали что телефон найден! Victory.
Единственное, чего я не могу понять — так это время работы (с утра пятницы, до утра понедельника). Даже используя CyanogenMod это дофига, учитывая, что я долбил его по GPS каждые 5 минут на протяжении пары дней 🙂 Правда в нем есть индуктивное зарядное устройство Qi, может он лежал рядом с каким-нибудь электрокабелем…
Источник
Данные о местоположении
В приложениях для мобильных устройств особенно важную роль играют данные о местоположении, применение которых способно обеспечить пользователю дополнительное удобство, где бы он ни находился.
Примеры кода
Хранилище ApiDemos на сайте GitHub содержит пример, который демонстрирует использование данных о местоположении на карте.
Java
- MyLocationDemoActivity: использование слоя «Мое местоположение», включая динамические разрешения.
- LocationSourceDemoActivity: использование собственного источника LocationSource .
- CurrentPlaceDetailsOnMap: определение текущего местоположения устройства Android и отображение сведений об организации или другом объекте, который там находится. Ознакомьтесь с руководством по отображению сведений о месте на карте.
Kotlin
- MyLocationDemoActivity: использование слоя «Мое местоположение», включая динамические разрешения.
- CurrentPlaceDetailsOnMap: определение текущего местоположения устройства Android и отображение сведений об организации или другом объекте, который там находится. Ознакомьтесь с руководством по отображению сведений о месте на карте.
Работа с данными о местоположении
Устройствам Android могут быть доступны данные о текущем местоположении (для их сбора используется комбинация нескольких технологий), о направлении и способе движения, а также о том, покинуло ли устройство геозону, т. е. пересекло ли оно заданную географическую границу. Работать с данными о местоположении можно несколькими способами в зависимости от задач конкретного приложения.
- Слой Мое местоположение представляет собой простой способ отобразить местонахождение устройства на карте. Он не возвращает никаких данных.
- Для всех программных запросов данных о местоположении рекомендуется использовать Location API сервисов Google Play.
- Интерфейс LocationSource позволяет использовать собственный источник данных о местоположении.
Доступ к данным о местоположении
Если приложению требуется доступ к данным о местоположении пользователя, вы должны запросить разрешение, добавив в приложение соответствующие настройки.
Android предлагает два разрешения на использование данных о местоположении: ACCESS_COARSE_LOCATION и ACCESS_FINE_LOCATION . От вашего выбора зависит, насколько точную информацию будет предоставлять API. Вам необходимо запросить только одно из разрешений на использование данных о местоположении Android в зависимости от требуемого уровня точности:
- android.permission.ACCESS_COARSE_LOCATION позволяет использовать точки доступа Wi-Fi и/или мобильные данные, чтобы определять приблизительное местоположение устройства. API предоставляет информацию о местоположении с точностью примерно до городского квартала.
- android.permission.ACCESS_FINE_LOCATION позволяет API максимально точно определять местоположение на основании информации, предоставляемой поставщиками данных о местоположении, включая глобальную систему позиционирования (GPS), сеть Wi-Fi и мобильные данные.
Добавление разрешений в манифест приложения
Добавьте одно из следующих разрешений в качестве дочернего для элемента в манифесте Android. Укажите разрешение для данных о приблизительном местоположении:
Или разрешение для данных о точном местоположении:
Запрос разрешений в среде выполнения
В Android 6.0 (Marshmallow) представлена новая модель работы с разрешениями, которая оптимизирует процесс установки и обновления приложений пользователями. Если ваше приложение предназначено для API уровня 23 или более позднего, вы можете использовать новую модель разрешений.
Если приложение поддерживает новую модель разрешений, а на устройстве используется Android 6.0 (Marshmallow) или более новая версия, пользователю не нужно предоставлять какие-либо разрешения при установке приложения или его обновлении. Пользователь увидит диалоговое окно с просьбой предоставить соответствующее разрешение.
Чтобы обеспечить удобство для пользователя, важно запрашивать доступ в контексте. Если эта информация необходима для работы приложения, запрашивайте разрешение при запуске. Для этого рекомендуется использовать экран приветствия или мастер с объяснением причины запроса.
Если доступ к данным о местоположении необходим приложению лишь для некоторых функций, то запрос следует показывать лишь при выполнении действия, требующего такого разрешения.
Приложение должно корректно продолжить работу, если пользователь откажется предоставить доступ. Например, если разрешение требуется лишь для определенной функции, приложение может просто отключить ее. Если же приложение неспособно работать без этих данных, в нем могут отключиться функциональные возможности. При этом следует проинформировать пользователя о том, что для дальнейшей работы нужен доступ к данным о местоположении.
В следующем примере кода проверка разрешения выполняется с использованием библиотеки поддержки перед включением слоя «Мое местоположение»: Затем результат запроса разрешения обрабатывается путем реализации ActivityCompat.OnRequestPermissionsResultCallback из библиотеки поддержки.
Kotlin
Слой «Мое местоположение»
Слой «Мое местоположение» и одноименная кнопка позволяют пользователям видеть свое актуальное местоположение на карте. Чтобы включить слой «Мое местоположение», вызовите метод mMap.setMyLocationEnabled() .
Простой пример использования слоя «Мое местоположение»:
Kotlin
Если включен слой «Мое местоположение», соответствующая кнопка отображается в правом верхнем углу экрана. При нажатии этой кнопки камера центрирует карту по текущему местоположению устройства, если оно известно. На карте местоположение обозначается маленькой синей точкой, если устройство неподвижно, или значком шеврона, если устройство находится в движении.
На скриншоте ниже вы можете увидеть кнопку «Мое местоположение» справа вверху и синюю точку в центре карты.
Чтобы предотвратить показ кнопки «Мое местоположение», вызовите UiSettings.setMyLocationButtonEnabled(false) .
Ваше приложение может реагировать на следующие события:
- Если пользователь нажимает кнопку «Мое местоположение», ваше приложение получает обратный вызов onMyLocationButtonClick() от прослушивателя GoogleMap.OnMyLocationButtonClickListener .
- Если пользователь нажимает на синюю точку «Мое местоположение», ваше приложение получает обратный вызов onMyLocationClick() от прослушивателя GoogleMap.OnMyLocationClickListener .
Важный пункт Условий использования
Обеспечивайте конфиденциальность пользователей,
информируйте их о том, что происходит в приложении.
Всегда сообщайте пользователям, как вы собираетесь применять их данные. Препятствуйте персональной идентификации пользователей по их данным. Перед применением данных о местоположении обязательно получите разрешение. Дайте пользователям возможность в любое время отозвать его.
Location API сервисов Google Play
Данные о местоположении в приложениях для Android лучше всего обрабатывать с помощью Location API сервисов Google Play. Он позволяет выполнять следующие задачи:
- определять местоположение устройства;
- отслеживать изменение местоположения с помощью прослушивателей;
- определять способ движения, если местоположение устройства меняется;
- создавать геозоны и отслеживать пересечение их границ.
Location API упрощает создание приложений, работающих с данными о текущем местоположении пользователя и эффективно расходующих ресурс аккумулятора устройства. Как и Maps SDK for Android, Location API распространяется как часть SDK сервисов Google Play. Дополнительную информацию вы можете найти в учебном материале об использовании в приложении данных о местоположении, а также в документации по Location API. Примеры кода содержатся в SDK сервисов Google Play.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Источник