Урок 131. Камера. Используем системное приложение

Обсуждение уроков
Махкамджон
Сообщения: 1
Зарегистрирован: 27 мар 2021, 11:53

Re: Урок 131. Камера. Используем системное приложение

Сообщение Махкамджон » 27 мар 2021, 12:03

я хотел программу (Урок131) тестировать на андроид но в программе произошло ошибка. В чем может быть причина?

VKB
Сообщения: 3
Зарегистрирован: 13 июн 2015, 12:07

Re: Урок 131. Камера. Используем системное приложение

Сообщение VKB » 29 дек 2021, 23:25

Я немного переделал пример для фото. Раз в интенте нам ничего не возвращается, можно читать файл из файловой системы, куда его записала камера. Но выяснилось, что для новых версий API пример не работает. Условно удалось заставить его работать, если после startActivityForResult вставить вызов типа SystemClock.sleep(10000) и успеть сделать фото за 10 секунд (альтернатива постоять там в отладчике, сделать фото, и потом отпустить выполнение). Если метод onClickPhoto заканчивает своё выполнение до того, как мы сфотографируем, то при вызове onActivityResult все наши изменения в глобальных переменных, которые мы делали в generateFileUri будут не видны. Как такое может получиться не понятно, ибо значения уже были изменены до вызова startActivityForResult (и в в отладчике это видно). Но когда по окончании фотографирования выполняется onActivityResult, то изменений в глобальных переменных, которые были сделаны по событию OnClick, не видно. Из-за этого нет возможности даже использовать какие-либо механизмы типа семафоров. Потому что они тоже остаются в том же состоянии, каком были перед вызовом OnClickPhoto. При этом если нам не нужно генерить уникальное имя файла, а мы всегда будем использовать одно и то же имя, то всё работает. Файл камера успешно пишет, проблема не с чтением этого файла, а с выяснением его имени внутри startActivityForResult.

Ответить