Skip to content

Android-Developer-Basic/OTUS_MapsAndSensorsHW

 
 

Repository files navigation

Домашнее задание "Карта, сенсоры, камера"

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

  1. Для фото необходимо использовать библиотеку CameraX
  2. Во время фотографии отслеживать угол наклона телефона и выводить подсказки пользователю
  3. При сохранении фотографии добавлять координаты местоположения в метаданные фото
  4. Для отображения превью фото на карте использовать Google Maps

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

OTUS HW Location+Maps+Sensors+Camera

Описание

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

  1. Для фото необходимо использовать библиотеку CameraX
  2. Во время фотографии отслеживать угол наклона телефона и выводить подсказки пользователю
  3. При сохранении фотографии добавлять координаты местоположения в метаданные фото
  4. Для отображения превью фото на карте использовать Google Maps

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

Проект размещен на GitHub https://github.com/ogndman/OTUS_MapsAndSensorsHW

Общей перечень задач

  1. Инициализация карты #maps
    1. В AndroidManifest.xml есть блок meta-data, в значение атрибута ключа android:value вставлена заглушка API key. Получить данный ключ можно через Google Console пройдя гайд https://developers.google.com/maps/documentation/android-sdk/get-api-key. После получения следует вставить его значение вместо YOUR_API_KEY.
    2. В классе MapsActivity, в переопределенном методе onCreat() необходимо запустить асинхронный процесс инициализации карты обратившись к экземпляру фрагмента карты *mapFragment* и вызвав метод getMapAsync() передав в него реализацию интерфейса OnMapReadyCallback
  2. Разрешения #permissions
    1. В AndroidManifest.xml над блоком <application необходимо добавить все используемые пермишены для работы с местоположением и картой их может быть от 2-х до 3-х в зависимости от точности получаемого местоположения.
    2. В классе CameraActivity в companion object (внизу класса) в переменной REQUIRED_PERMISSIONS перечислить требуемые пермишены, которые будут запрашиваться у пользователя при старте активити камеры
  3. Получение местоположения #location
    1. В классе CameraActivity в методе getLastLocation() осуществить единоразовое получение текущего местоположения пользователя обращаясь к переменной fusedLocationClient которая является экземпляром FusedLocationProvider Можно использоваться вызовы getCurrentLocation() или getLastLocation()
    2. Полученное местоположение – экземпляр класса Location необходимо передать в обратный вызов callback вызвав метод invoke()
  4. Вызов камеры #camera
    1. В классе CameraActivity в методе takePhot() необходимо вызвать код для получения фотографии с камеры. Необходимо обратиться к переменной imageCapture и вызвать метод takePicture() передав в сигнатуру метода переменную outputFileOptions, executor можно взять главный поток с помощью вызова ContextCompat.getMainExecutor(this) и созданный экземпляр ImageCapture.OnImageSavedCallback
    2. В созданном экземпляре ImageCapture.OnImageSavedCallback в реализации метода onImageSaved() вывести Toast c сообщением об удачном сохранении фото.
    3. В созданном экземпляре ImageCapture.OnImageSavedCallback в реализации метода onImageSaved() установить результат работы активити с помощью метода setResult() передав в него константу SUCCESS_RESULT_CODE и вызвать finish() для закрытия активити.
    4. В созданном экземпляре ImageCapture.OnImageSavedCallback в реализации метода onError() вывести сообщение об ошибке с помощью любого инструмента и в свободном формате.
  5. Метаданные местоположения в фото #camera
    1. В классе CameraActivity, в методе takePhoto(), при создании объекта outputFileOptions через метод setMetadata() у билдера, установить метаданные предварительно создав ImageCapture.Metadata() с установленным в него свойством location равным location полученным из метода getLastLocation **{** *location* **->**
  6. Превью фотографии как маркер на карте #maps
    1. В классе MapsActivity в методе showPreviewOnMap() дополнить объект MarkerOptions свойством icon и передать BitmapDescriptor полученный с помощью BitmapDescriptorFactory и переменной pinBimap
    2. В классе MapsActivity в методе showPreviewOnMap() передвинуть камеру к местоположению одного фото с помощью вызова map.moveCamera() или map.animateCamera с произвольными параметрами
  7. Датчики #sensors
    1. В классе CameraActivity в методе onCreate() получить экземпляр SensorManager и присвоить значение переменной sensorManager
    2. С помощью созданного sensorManager проверить и получить датчик акселерометра и присвоить его как значение переменной tiltSensor
    3. В методе жизненного цикла активити используя sensorManager подписаться на получение данных от датчика через метод registerListener и слушатель sensorEventListener
    4. В методе жизненного цикла активити используя sensorManager отписаться от получения данных от датчика через метод unregisterListener

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%