Нічне бачення тепер доступне і для Android
Усі статті, обговорення, новини про Mobile — в одному місці. Підписуйтеся на телеграм-канал!
В решті-решт вдалось реалізувати Green Night для платформи Android. Для тих, хто не знає що це, можна почитати мої попередні статті 1 і 2
Android vs iOS
Почавши розробку на Андроїд я одразу був здивований, що для роботи із камерою там цілий зоопарк бібліотек 🙃, на відмінно від iOS де все відбувається в рамках однієї AVFoundation.
Спочатку мій вибір впав на CameraX у парі із Jetpack Compose. Але дуже швидко стало ясно що ця бібліотека не зможе задовільнити усіх потреб для такої нестандартної задачі, тому я перейшов на Сamera2, і, наскільки я зрозумів, вона не дружить із Compose (можу помилятись, новачок в Андроїді), тому прийшлось вивчати класичний UI тулкіт із блек-джеком та
Другою відмінністю Андроїда від iOS стало те, що будь-яке налаштування камери вимагає відключення автоналаштуваннь, інакше телефон корегує все під свій лад. І це на початку дуже збивало з толку 😅
Наприклад для налаштування експозиції треба обовʼязково відключати автоекспозицію CONTROL_AE_MODE = CONTROL_AE_MODE_OFF
// Без першого рядка ніяк!
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraCharacteristics.CONTROL_AE_MODE_OFF)
val aeCompensationRange = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE)
val maxExposureCompensation = aeCompensationRange?.upper ?: 0
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, maxExposureCompensation)
Результат
Наразі додаток веде себе по різному. Десь не може використовувати довгу витримку, особливо це помітно для телефонів Samsung. На Google Pixel картинка не стає зеленою, але все ж таки щось більш-менш працююче вдалось створити. Якщо б в коментарях хтось відписав такі данні:
- число витримки (у верхньому лівому куті)
- кольорову гаму (зелене чи кольорове)
- модель телефона
То це б могло дуже допомогти тестуванню.
Вже після релізу я знайшов інформацію, що багато залежить від INFO_SUPPORTED_HARDWARE_LEVEL — це така змінна, яка показує, наскільки повноцінно виробник телефона реалізував API керування камерою.
Висновки
Наразі зробив висновки що створювати такі речі під Андроїд значно важче, ніж під iOS, адже кожен виробник смартфонів надає різні можливості, і різну поведінку камери, а у Huawei навіть є власна бібліотека для розширеного керування камерою 😀. Все це створює великі труднощі, і певно для Андроїд треба тримати більший штат розробників і тестувальників, аніж для iOS
Скачати додаток можна за посиланням:
play.google.com/...s?id=ua.ribbon.greennight
UPD. ВАЖЛИВО: використовувати додаток треба на вулиці вночі, або в напівзачиненій кімнаті. Інакше в день ви побачите просто білий екран, а в абсолютній темряві — просто чорний
35 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів