
Все больше и больше поражаюсь многообразию андроид-платформы, а именно тому, как на свое усмотрение производители девайсов отключают важные элементы системы или доводят их до невменяемого состояния.
Сейчас плотно работаю с двумя вещами: камера и сеть.
Камера - это боль и стоны и анальный
секс кекс андроид-разработчиков. Базовые примеры из SDK могут запросто(а зачастую они так и делают) не работать чуть ли не на топово-флагманских девайсах. Вот, например краткий список:
- Samsung Galaxy S3 - фронтальная камера пишет зеленое видео, хак на это пока не нашел
- Samsung Galaxy S2 и Note - задняя камера пишет зеленое видео пока не поставишь хардкодный параметр в "1" в определенный момент времени
- LG3D, Optimus и еще какой-то - зум на фронтальной камере не работает, хотя метод isZoomSupported железобетонно возвращает true
- Motorolla DEFY + - зум вроде как бы работает, но при начале записи он просто сбрасывется в 0.
И еще много, много аналогичных примеров, которые просто ставят в тупик. В результате чего некоторые фичи приходится отключать не просто для конкретных девайсов, а чуть ли не для всей линейки конкретного производителя. Так, например, у меня для всех LG отключен контрол зума для фронтальной камеры.
Во время тестирования таких вещей очень хорошо делать отсылку к приложению Camera, которое идет с firmware. Я задаю тогда один каверзный вопрос и, мысленно вознося молитву к Гуглу, надеюсь, что в нативном приложении эта фийча не работает. В 90% случаях именно так и происходит, тогда вопрос реализации таких вещей на девайсах, которые не поддерживают этого аут-оф-зе-бокс сразу отпадает. А вообще меня очень сильно умиляет момент, когда на телефоне за 600уе невозможно сделать видео-съемку с использованием зума.

Теперь поговорим о сети. Есть задача написать пингер, который будет выцеплять из сети девайсы с запущенным "нашим" приложением. "Ну что ж тут сложного?", подумал я и, вспомнив курс Сетей из универа, написал небольшой пингер, которы по UDP шлет броадкаст. Но и тут вмешались могучие и злющие производители телефонов и, в казалось бы такой фундаментальной вещи как работа с сетью, тоже наваляли дров. К примеру:
- на моем Galaxy Nexus(флагмане от Google) я не могу параллельно читать и писать из/в UDP сокет, но я спокойно могу это делать на Samsung Ace, на девайсе, который на порядок проще/дешевле/хуже моей "прелести"
- HTC Desire попросту отказывается принимать броадкасты. Как оказалось, таким образом HTC заботится о своих пользователях, дабы их батареечки не разряжались. Чинится это только кастомными проишвками, например cyanogenmod. И так делают не только они.
Одним словом, чем больше педалю под Андроид, тем больше я уверен в том, что сделал правильный выбор. Ну разве можно представить себе такие проблемы под iPhone? Та ни в жизнь.