SlideShare a Scribd company logo
1 of 21
Download to read offline
Работа с геоданными
Android
Возможности Android
Работа с кучей сенсоров
(если есть на устройстве)
Картографическйи движок
(если установлены дополнения Google Play.
нет только на Kindle и китайских устройствах)
Все богатство веб-сервисов
System permissions
1 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Разрешает получать информацию из сети
(на базе вышек сотовой связи, wi- , и т.д.),
соответствует LocationManager.NETWORK_PROVIDER.
1 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Использование GPS,
соответствует LocationManager.GPS_PROVIDER.
*Когда мы используем ACCESS_FUNE_LOCATION, использование ACCESS_COARSE_LOCATION включется
неявно.
Получение геоданных
Хорошее приложение
Отдает точные координаты
Отдает актуальные координаты
Экономит батарейку
Как это сделать
Кэширование
Работа с разными провайдерами
1 class LocationActivity extends Activity {
2 private LocationManager locationManager =
3 (LocationManager) getSystemService(Context.LOCATION_SERVICE);
4
5 private LocationListener locationListener = new LocationListener() {
6 void onLocationChanged(Location location) {//крординаты}
7 void onStatusChanged(String provider, int status, Bundle extras) {}
8 void onProviderEnabled(String provider) {}
9 void onProviderDisabled(String provider) {}
10 };
11
12 void request() {
13 locationManager.requestLocationUpdates(
14 LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
15 //provider, minTime, minDistance, listener
16 }
17 }
GoogleApiClient - 1 шаг
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 package="com.noveogroup.your.application">
3 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
4 <application...>
5 <meta-data android:name="com.google.android.gms.version"
6 android:value="@integer/google_play_services_version"/>
7 </application>
8 </manifest>
Дальше работаем с LocationServices.FusedLocationApi
GoogleApiClient - 2 шаг
com.google.android.gms:play-services-location:9.2.1.
1 class LocationGoogleActivity extends Activity {
2
3 private GoogleApiClient googleApiClient;
4
5 public void onCreate() {
6 googleApiClient = new GoogleApiClient.Builder(this)
7 .addApi(LocationServices.API)
8 .addConnectionCallbacks(
9 new ConnectionCallbacks() {
10 void onConnected(Bundle bundle) {}
11 void onConnectionSuspended(int i) {}
12 })
13 .addOnConnectionFailedListener(
14 new OnConnectionFailedListener() {
15 void onConnectionFailed(ConnectionResult result) {}
16 })
17 .build();
18 }
19
20 public void onStart() { googleApiClient.connect(); }
21 public void onStop() { googleApiClient.disconnect(); }
22 }
Получение местоположения
LocationServices.FusedLocationApi:
1 //доступен ли сервис?
2 LocationAvailability getLocationAvailability(GoogleApiClient client)
3
4 //последние закэшированные координаты
5 Location getLastLocation(GoogleApiClient client)
6
7 //работа с заглушками
8 PendingResult<Status> setMockLocation(
9 GoogleApiClient client, Location mockLocation)
10 PendingResult<Status> setMockMode(
11 GoogleApiClient client, boolean isMockMode)
12
13 //подписки
14 //Стартуем запрос обновлений и получаем через callback
15 PendingResult<Status> requestLocationUpdates(GoogleApiClient client, ...)
16 //Останавливаем запрос обновлений, нужно делать в onStop
17 PendingResult<Status> removeLocationUpdates(GoogleApiClient client, ...)
Особенности геолокации
Геолокация очень затранта по работе с аккумулятором
Рекомендуется устанавливать разумные таймауты и отключать геолокационные сервисы
на время бездействия приложения
Геолокация не всегда отдает точное положение, особенно для статичного объекта
(погрешнрость GPS - порядка 50 метров, GSM - до километров)
Google специально из соображений безопасности отдает положение в случае определния
по GSM с большой погрешностью
Холодные старт довольно долгий
В Китае сложно пользоваться:)
Что еще есть
Google Places API:
Это web-сервис
Выбор и поиск мест
Автодополнение адресов
Поиск адреса по координатам и в радиусе
Geofencing:
GeofenceTransitionsIntentService
Вам будут присылать, когда пользователь в нужно месте
Activity Recognition:
Распознавание активности: бег, ходьба, велосипед
Как отобразить
Google API for Android, компонент MapView
Google Play Services, компонент MapFragment
Yandex maps
WebView + GoogleMaps/Bing Maps/Yandex Maps...
3rd-party libraries (OsmDroid, Mapsforge) - OpenStreetMaps, другие движки, можно написать
коннектор к любому сервису
Внешнее приложение (Waze, Google Maps, ...)
Внешнее приложение
1 static String LOCATION_FORMAT = "geo:%.6f,%.6f";
2 static String ZOOM_FORMAT = "geo:%.6f,%.6f?z=zoom";
3 static String LABEL_FORMAT = "geo:0,0?q=%.6f,%.6f(%s)";
4 static String QUERY_FORMAT = "geo:0,0?q=%s";
5
6 String uri = String.format(ZOOM_FORMAT, latitude, longitude, zoom);
7 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
8 startActivity(intent);
* все строки должны быть закодированы (encoded)
например "Noveo Group" будет "Noveo%20Group"
WebView
Особенности
Перед нам все богатство всяческих веб-сервисов
Загружаем нужную страницу, если необходимо - передаем через параметры позицию
Минусы - вся работа через JavaScript WebView позволяет прицепить обработчики на Java к
коду на JavaScript, но это ухудшает быстродействие.
Сложнее писать свои дополнительные слои
Как вызвать
Кидаем Intent.ACTION_VIEW с Uri формата веб-сервиса.
Обычно это похоже на uri для вызова внешнего приложения.
Google Maps
Подключаем Google Play Services.
Регистрируем приложение:
1. Добавляем к приложению свой *.keystore
(если нет - генерим новый с помощью keytool)
2. Регистрируем приложение в Google Developers Console
3. Создаем новый проект
4. В настройках (APIs & auth -> APIs) включаем Google Maps Android API v2
5. В настройках (APIs & auth -> Credentials) добавляем ключ для Public API access.
Пригодятся сертификат из keystore и пакет приложения
Добавляем API_KEY в AndroidManifest
1 <meta-data android:name="com.google.android.geo.API_KEY "
2 android:value="%API_KEY%"/>
Google Maps
Начиная с API v2, карты отображаются в фрагментах.
1 <fragment android:id="@+id/map"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 class="com.google.android.gms.maps.SupportMapFragment"/>
1 MapFragment mapFragment =
2 (MapFragment) getFragmentManager().findFragmentById(R.id.map);
3 GoogleMap mapView = mapFragment.getMap();
4 mapView.setMapType(GoogleMap.MAP_TYPE_HYBRID)
5 //and so on...
Google Maps
Можем включить отображение
Спутник GoogleMap.MAP_TYPE_SATELLITE
Гибрид GoogleMap.MAP_TYPE_HYBRID
Улицы GoogleMap.MAP_TYPE_NORMAL Если эти прелести есть для данной локации
Не надо беспокоиться насчет памяти - MapFragment выделяет память под картинки
нативно, использует Bitmap pool. Если оно и решит сломаться, вы сможете только
соболезновать.
Можно делать оверлеи!
Маркеры
Отображаем какую-либо точку на экране, по нажатию - баббл с информацией.
1 Marker marker = googleMapView.addMarker(new MarkerOptions()
2 .position(new LatLng(55.049035f, 92.912304f))
3 .title("Noveo city office")
4 .snippet("Lecture about Geodata"));
Маркеры
Можно переопределить у GoogleMap:
.setOnMarkerClickListener(OnMarkerClickListener) —
вместо показа баббла своё действие
.setOnMarkerDragListener(OnMarkerDragListener) —
на перетаскивание (по умолчанию не работает)
.setOnInfoWindowClickListener(OnInfoWindowClickListener) —
нажатие на баббл.
Google Maps
Можно очень классно управлять наклоном, поворотом, местоположением и анимацией.
1 private static final LatLng SYDNEY = new LatLng(-33.88,151.21);
2 private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, - 122.1);
3
4 private GoogleMap map;
5
6 map.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15));
7 map.animateCamera(CameraUpdateFactory.zoomIn());
8 map.animateCamera(CameraUpdateFactory.zoomTo(10), null, 2000);
9
10 CameraPosition cameraPosition = new CameraPosition.Builder()
11 .target(MOUNTAIN_VIEW)
12 .zoom(17)
13 .bearing(90)
14 .tilt(30)
15 .build();
16 map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
Google Maps не всесильны
Ограничения на бесплатное использование Лицензия >>
Закрытый исходный код
Привязано к гуглокартам
Не все можно модифицировать
Помогут сторонние библиотеки Mapsforge, OsmDroid, другие
Идут в комплекте с коннекторами для
других источников карт (OpenStreetMaps)
Стараются повторять контракт гуглокарт
(легче миграция)
Можно подключить свой источник
Тайловые карты
Карта разбивается на квадратики
В зависимосит от уровня зума обеще число квадратиков больше-меньше
(пропорционально степеням двойки)
В общих словах, мы должны просто реализовать метод, позволяющий для уровня зума N
предоставить картинку для квадрата с координатами (X, Y).
Движок сам управляет подгрузкой, пока более деталеьные изображения не загрузились,
ресмэплит картинки другого масштаба.
Полезные ссылки
Android Location
Android Adding Maps
Google Maps
OSMDroid
Mapsforge

More Related Content

Viewers also liked

Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Noveo
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийWebinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийDenis Vasilyev
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)Антон Звонов
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Noveo
 
Android - 05 - Android basics
Android - 05 - Android basicsAndroid - 05 - Android basics
Android - 05 - Android basicsNoveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiDenis Vasilyev
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Denis Vasilyev
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Noveo
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - GraphicsNoveo
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Denis Vasilyev
 

Viewers also liked (20)

Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложенийWebinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
 
Lec 10
Lec 10Lec 10
Lec 10
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
Canvas
CanvasCanvas
Canvas
 
Android - 05 - Android basics
Android - 05 - Android basicsAndroid - 05 - Android basics
Android - 05 - Android basics
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Lec 13
Lec 13Lec 13
Lec 13
 
Lec 9
Lec 9Lec 9
Lec 9
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
 
Lec 12
Lec 12Lec 12
Lec 12
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
Thread
ThreadThread
Thread
 

Similar to Работа с геоданными (Lecture 18 – geolocation)

Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv Startup Club
 
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...Mail.ru Group
 
Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Empatika
 
Android for-indoor-services
Android for-indoor-servicesAndroid for-indoor-services
Android for-indoor-servicesOSLL
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Kuban Dzhakipov
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Appium для народа
Appium для народаAppium для народа
Appium для народаSQALab
 
API Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классAPI Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классYandex.Maps
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, MicrosoftYandex
 
Создай свое первое Android приложение.
Создай свое первое Android приложение. Создай свое первое Android приложение.
Создай свое первое Android приложение. Kuban Dzhakipov
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?UNETA
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”GlobalLogic Ukraine
 

Similar to Работа с геоданными (Lecture 18 – geolocation) (20)

Google maps for android
Google maps for androidGoogle maps for android
Google maps for android
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
 
Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1
 
Android for-indoor-services
Android for-indoor-servicesAndroid for-indoor-services
Android for-indoor-services
 
Google MT.ppt
Google MT.pptGoogle MT.ppt
Google MT.ppt
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Appium для народа
Appium для народаAppium для народа
Appium для народа
 
API Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классAPI Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-класс
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
 
Создай свое первое Android приложение.
Создай свое первое Android приложение. Создай свое первое Android приложение.
Создай свое первое Android приложение.
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Windows 10 SDK
Windows 10 SDKWindows 10 SDK
Windows 10 SDK
 
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
 
Android service
Android serviceAndroid service
Android service
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Noveo
 
Yii2
Yii2Yii2
Yii2Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизацияNoveo
 
Rest
RestRest
RestNoveo
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
MySQL
MySQLMySQL
MySQLNoveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)Noveo
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Noveo
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QRNoveo
 
03 коллекции
03   коллекции03   коллекции
03 коллекцииNoveo
 

More from Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QR
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 

Работа с геоданными (Lecture 18 – geolocation)

  • 2. Возможности Android Работа с кучей сенсоров (если есть на устройстве) Картографическйи движок (если установлены дополнения Google Play. нет только на Kindle и китайских устройствах) Все богатство веб-сервисов
  • 3. System permissions 1 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> Разрешает получать информацию из сети (на базе вышек сотовой связи, wi- , и т.д.), соответствует LocationManager.NETWORK_PROVIDER. 1 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> Использование GPS, соответствует LocationManager.GPS_PROVIDER. *Когда мы используем ACCESS_FUNE_LOCATION, использование ACCESS_COARSE_LOCATION включется неявно.
  • 4. Получение геоданных Хорошее приложение Отдает точные координаты Отдает актуальные координаты Экономит батарейку Как это сделать Кэширование Работа с разными провайдерами 1 class LocationActivity extends Activity { 2 private LocationManager locationManager = 3 (LocationManager) getSystemService(Context.LOCATION_SERVICE); 4 5 private LocationListener locationListener = new LocationListener() { 6 void onLocationChanged(Location location) {//крординаты} 7 void onStatusChanged(String provider, int status, Bundle extras) {} 8 void onProviderEnabled(String provider) {} 9 void onProviderDisabled(String provider) {} 10 }; 11 12 void request() { 13 locationManager.requestLocationUpdates( 14 LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 15 //provider, minTime, minDistance, listener 16 } 17 }
  • 5. GoogleApiClient - 1 шаг 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 package="com.noveogroup.your.application"> 3 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 4 <application...> 5 <meta-data android:name="com.google.android.gms.version" 6 android:value="@integer/google_play_services_version"/> 7 </application> 8 </manifest> Дальше работаем с LocationServices.FusedLocationApi
  • 6. GoogleApiClient - 2 шаг com.google.android.gms:play-services-location:9.2.1. 1 class LocationGoogleActivity extends Activity { 2 3 private GoogleApiClient googleApiClient; 4 5 public void onCreate() { 6 googleApiClient = new GoogleApiClient.Builder(this) 7 .addApi(LocationServices.API) 8 .addConnectionCallbacks( 9 new ConnectionCallbacks() { 10 void onConnected(Bundle bundle) {} 11 void onConnectionSuspended(int i) {} 12 }) 13 .addOnConnectionFailedListener( 14 new OnConnectionFailedListener() { 15 void onConnectionFailed(ConnectionResult result) {} 16 }) 17 .build(); 18 } 19 20 public void onStart() { googleApiClient.connect(); } 21 public void onStop() { googleApiClient.disconnect(); } 22 }
  • 7. Получение местоположения LocationServices.FusedLocationApi: 1 //доступен ли сервис? 2 LocationAvailability getLocationAvailability(GoogleApiClient client) 3 4 //последние закэшированные координаты 5 Location getLastLocation(GoogleApiClient client) 6 7 //работа с заглушками 8 PendingResult<Status> setMockLocation( 9 GoogleApiClient client, Location mockLocation) 10 PendingResult<Status> setMockMode( 11 GoogleApiClient client, boolean isMockMode) 12 13 //подписки 14 //Стартуем запрос обновлений и получаем через callback 15 PendingResult<Status> requestLocationUpdates(GoogleApiClient client, ...) 16 //Останавливаем запрос обновлений, нужно делать в onStop 17 PendingResult<Status> removeLocationUpdates(GoogleApiClient client, ...)
  • 8. Особенности геолокации Геолокация очень затранта по работе с аккумулятором Рекомендуется устанавливать разумные таймауты и отключать геолокационные сервисы на время бездействия приложения Геолокация не всегда отдает точное положение, особенно для статичного объекта (погрешнрость GPS - порядка 50 метров, GSM - до километров) Google специально из соображений безопасности отдает положение в случае определния по GSM с большой погрешностью Холодные старт довольно долгий В Китае сложно пользоваться:)
  • 9. Что еще есть Google Places API: Это web-сервис Выбор и поиск мест Автодополнение адресов Поиск адреса по координатам и в радиусе Geofencing: GeofenceTransitionsIntentService Вам будут присылать, когда пользователь в нужно месте Activity Recognition: Распознавание активности: бег, ходьба, велосипед
  • 10. Как отобразить Google API for Android, компонент MapView Google Play Services, компонент MapFragment Yandex maps WebView + GoogleMaps/Bing Maps/Yandex Maps... 3rd-party libraries (OsmDroid, Mapsforge) - OpenStreetMaps, другие движки, можно написать коннектор к любому сервису Внешнее приложение (Waze, Google Maps, ...)
  • 11. Внешнее приложение 1 static String LOCATION_FORMAT = "geo:%.6f,%.6f"; 2 static String ZOOM_FORMAT = "geo:%.6f,%.6f?z=zoom"; 3 static String LABEL_FORMAT = "geo:0,0?q=%.6f,%.6f(%s)"; 4 static String QUERY_FORMAT = "geo:0,0?q=%s"; 5 6 String uri = String.format(ZOOM_FORMAT, latitude, longitude, zoom); 7 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 8 startActivity(intent); * все строки должны быть закодированы (encoded) например "Noveo Group" будет "Noveo%20Group"
  • 12. WebView Особенности Перед нам все богатство всяческих веб-сервисов Загружаем нужную страницу, если необходимо - передаем через параметры позицию Минусы - вся работа через JavaScript WebView позволяет прицепить обработчики на Java к коду на JavaScript, но это ухудшает быстродействие. Сложнее писать свои дополнительные слои Как вызвать Кидаем Intent.ACTION_VIEW с Uri формата веб-сервиса. Обычно это похоже на uri для вызова внешнего приложения.
  • 13. Google Maps Подключаем Google Play Services. Регистрируем приложение: 1. Добавляем к приложению свой *.keystore (если нет - генерим новый с помощью keytool) 2. Регистрируем приложение в Google Developers Console 3. Создаем новый проект 4. В настройках (APIs & auth -> APIs) включаем Google Maps Android API v2 5. В настройках (APIs & auth -> Credentials) добавляем ключ для Public API access. Пригодятся сертификат из keystore и пакет приложения Добавляем API_KEY в AndroidManifest 1 <meta-data android:name="com.google.android.geo.API_KEY " 2 android:value="%API_KEY%"/>
  • 14. Google Maps Начиная с API v2, карты отображаются в фрагментах. 1 <fragment android:id="@+id/map" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 class="com.google.android.gms.maps.SupportMapFragment"/> 1 MapFragment mapFragment = 2 (MapFragment) getFragmentManager().findFragmentById(R.id.map); 3 GoogleMap mapView = mapFragment.getMap(); 4 mapView.setMapType(GoogleMap.MAP_TYPE_HYBRID) 5 //and so on...
  • 15. Google Maps Можем включить отображение Спутник GoogleMap.MAP_TYPE_SATELLITE Гибрид GoogleMap.MAP_TYPE_HYBRID Улицы GoogleMap.MAP_TYPE_NORMAL Если эти прелести есть для данной локации Не надо беспокоиться насчет памяти - MapFragment выделяет память под картинки нативно, использует Bitmap pool. Если оно и решит сломаться, вы сможете только соболезновать. Можно делать оверлеи!
  • 16. Маркеры Отображаем какую-либо точку на экране, по нажатию - баббл с информацией. 1 Marker marker = googleMapView.addMarker(new MarkerOptions() 2 .position(new LatLng(55.049035f, 92.912304f)) 3 .title("Noveo city office") 4 .snippet("Lecture about Geodata"));
  • 17. Маркеры Можно переопределить у GoogleMap: .setOnMarkerClickListener(OnMarkerClickListener) — вместо показа баббла своё действие .setOnMarkerDragListener(OnMarkerDragListener) — на перетаскивание (по умолчанию не работает) .setOnInfoWindowClickListener(OnInfoWindowClickListener) — нажатие на баббл.
  • 18. Google Maps Можно очень классно управлять наклоном, поворотом, местоположением и анимацией. 1 private static final LatLng SYDNEY = new LatLng(-33.88,151.21); 2 private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, - 122.1); 3 4 private GoogleMap map; 5 6 map.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15)); 7 map.animateCamera(CameraUpdateFactory.zoomIn()); 8 map.animateCamera(CameraUpdateFactory.zoomTo(10), null, 2000); 9 10 CameraPosition cameraPosition = new CameraPosition.Builder() 11 .target(MOUNTAIN_VIEW) 12 .zoom(17) 13 .bearing(90) 14 .tilt(30) 15 .build(); 16 map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
  • 19. Google Maps не всесильны Ограничения на бесплатное использование Лицензия >> Закрытый исходный код Привязано к гуглокартам Не все можно модифицировать Помогут сторонние библиотеки Mapsforge, OsmDroid, другие Идут в комплекте с коннекторами для других источников карт (OpenStreetMaps) Стараются повторять контракт гуглокарт (легче миграция) Можно подключить свой источник
  • 20. Тайловые карты Карта разбивается на квадратики В зависимосит от уровня зума обеще число квадратиков больше-меньше (пропорционально степеням двойки) В общих словах, мы должны просто реализовать метод, позволяющий для уровня зума N предоставить картинку для квадрата с координатами (X, Y). Движок сам управляет подгрузкой, пока более деталеьные изображения не загрузились, ресмэплит картинки другого масштаба.
  • 21. Полезные ссылки Android Location Android Adding Maps Google Maps OSMDroid Mapsforge