Я хочу написать действие, которое:
Есть ли какие-нибудь завершенные примеры там, что работает на каждом устройстве ? Ссылка на простое приложение с открытым исходным кодом, которое делает снимки, была бы идеальным ответом.
Мои исследования на данный момент:
Это распространенный сценарий, и есть много вопросов и руководств по этому поводу.
Существует два основных подхода:
Подход 1 был бы идеальным, но проблема в том, что намерение реализовано по-разному на каждом устройстве. На некоторых устройствах работает нормально. Однако на некоторых устройствах вы можете делать снимки, но они никогда не возвращаются в ваше приложение. На некоторых устройствах при запуске намерения ничего не происходит. Обычно он также сохраняет изображение на SD-карту и требует наличия SD-карты. Взаимодействие с пользователем также различается на каждом устройстве.
При подходе 2 проблема заключается в стабильности. Я пробовал несколько примеров, но мне удалось остановить работу камеры (до перезапуска) на некоторых устройствах и полностью заморозить другое устройство. На другом устройстве захват работал, но превью оставалось черным.
Я бы использовал ZXing в качестве примера приложения (я много с ним работаю), но оно использует только предварительный просмотр (видоискатель) и не делает никаких снимков. Я также обнаружил, что на некоторых устройствах ZXing не регулирует баланс белого автоматически при изменении условий освещения, в то время как приложение камеры делает это правильно (не уверен, можно ли это исправить).
Обновление:
Некоторое время я напрямую использовал API камеры. Это дает больше контроля (пользовательский интерфейс и т. Д.), Но я бы никому не рекомендовал это. Я бы работал на 90% устройств, но то и дело выпускалось новое устройство с другой проблемой.
Некоторые из проблем, с которыми я столкнулся:
В общем, я бы не рекомендовал идти этим маршрутом, если нет другого пути. Через два года я сбросил кастомный код и вернулся к подходу, основанному на намерениях. С тех пор проблем у меня стало намного меньше. Проблемы, которые у меня были с подходом, основанным на намерениях, были, вероятно, просто моей собственной некомпетентностью.
Если вам действительно нужно идти этим путем, я слышал, что это намного проще, если вы поддерживаете только устройства с Android 4.0+.