Skip to content

Latest commit

 

History

History
69 lines (58 loc) · 8.91 KB

File metadata and controls

69 lines (58 loc) · 8.91 KB

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

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

  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