вторник, 31 июля 2012 г.

PhoneGap: используем чужие плагины и пишем свои

Предыдущий мой пост о PhoneGap был рассчитан на начинающих разработчиков для мобильных устройств. Теперь давайте обсудим, какую пользу из этого фреймворка могут извлечь те, кто уже умеет делать "настоящие" Android (IOS и т.п) приложения.
Если вам приходилось работать над сравнительно большим приложением в тесном контакте с заказчиком, то вы знаете, какой процент требований заказчик выставляет "вдогонку", после утверждения ТЗ. Можно долго обсуждать, насколько это неприятно и неправильно, но с этим, как правило, приходиться жить. Большинство таких "дополнительных" требований касается того, что заказчик видит, т.е. интерфейса: "Тут сделайте жирным, а вот это подвиньте...". Здорово было бы, чтобы эту малоприятную работу делали не суровые java(objective-C)-программисты, а обычные html-css верстальщики, которых, кстати, нанять легче и дешевле. Таким образом приложение с помощью PhoneGap можно сделать не только кроссплатформенным, но и "двухслойным". Интерфейс и навигацию делаем на HTML5, а "тяжёлую" логику, если она есть, делаем нативной. При этом основной разработчик освобождается от вёрстки xml layout-ов, что само по себе уже даёт существенный прирост его производительности.
На выходе получаем вполне здоровый производственный процесс: html-css-javacsript-программисты пишут приложение на PhoneGap, а за всякой нетривиальной задачей обращаются к плагинам, которые пишут "настоящие" Android-разработчики. Вот давайте и посмотрим, насколько легко можно писать и использовать плагины для PhoneGap.

суббота, 28 июля 2012 г.

Поддержка управления в Android с помощью жестов.

Жесты - один из важнейших способов ввода в Android устройствах. Существует несколько категорий жестов, основные из которых это SingleTouch и Multitouch. 

Одной из желанных "плюшек" в приложении, так или иначе связанным с  изображениями является их масштабирование.

Под масштабированием будем понимать жесты трансформирующие наше View, и использующие более одного касания (мультитач).

Основой для приложения будет класс ScaleGestureDetector,  основной задачей которого является "узнавание" жестов масштабирования, и уведомления приложения с помощью CallBack'ов. При его использовании необходимо учитывать, что данная возможность доступна с версии Android 2.0 (Froyo).

Начнем с создания собственного ImageView.

четверг, 26 июля 2012 г.

PhoneGap: пишем для Android на Html и JavaScript


Разработка для мобильных платформ становится всё популярнее, затягивая всё больше программистов из смежных отраслей. Если вы писали, к примеру, серверный Java-код, то проблем с освоением платформы Android у вас скорее всего не будет. А если "в прошлой жизни" вы делали сайты на html+css+javascript? Тут нужно не только учить новый язык, но и осваивать "настоящее" ООП, которое не сразу и не каждому даётся. Если же вы решили охватить и IPhone/IPad, то учить нужно ещё и Objective-C. Что же делать, если учить новые технологии некогда, а подарить миру своё приложение для смартфонов хочется уже сейчас?
Фреймворк PhoneGap помогает решить эту проблему. Пишите приложение как локальную веб-страницу, а доступ к возможностям смартфона предоставит PhoneGap. Тут я постараюсь дать пошаговое руководство, как сделать простое Android-приложение на Html и JavaScript с помощью PhoneGap. Писать будем в IntelliJ IDEA. Эта замечательная IDE в последнее время сумела выбросить Eclipse из моего компьютера :)
Итак, приступим. Тут будет много скриншотов: лучше один раз увидеть, чем один раз прочитать.

среда, 25 июля 2012 г.

Используем фрагменты в приложении для Android 2.х

Разработчики Android основательно поработали над тем, чтобы наше приложение нормально выглядело как на десятидюймовом планшете, так и на смартфоне с экраном в 3,5 дюйма. Мы можем использовать несколько наборов графики, разные варианты разметки интерфейса в зависимости от ориентации экрана. И компоновать эти интерфейсы мы можем из произвольного набора автономных фрагментов. Конечно, фрагменты поддерживаются начиная с четвёртой версии Android, но с помощью android 4 support library и небольшого танца с бубном, можно реализовать эту технологию и под Android 2.х.
Давайте сделаем небольшое приложение "на фрагментах".

пятница, 20 июля 2012 г.

Распознаём QR-код в Android-приложении

Ранее я писал о том, как сгенерировать QR-код в Android-приложении. Для полноты картины не хватает ещё примера, как распознать QR-код. Простое решение для этого есть: вызвать с помощью Intent какое-нибудь из "посторонних" приложений, использующих ZXing. Эта библиотека предоставляет набор классов и ресурсов для отображения Activity c preview, самостоятельно распознаёт код и возвращает его в ваш метод onActivityResult.
Но как быть, если мы не хотим раскручивать чужие приложения? И встраивать к себе Activity и килограмм ресурсов из клиентской библиотеки ZXing не хочется... Выход есть. Мы можем самостоятельно реализовать всё что нам нужно, используя только ZXing core библиотеку. Давайте посмотрим, как это сделать.

среда, 18 июля 2012 г.

Сервлет для генерации QR-кодов

Раньше я описывал, как используя библиотеку ZXing можно сделать Android-приложение для генерации QR-кода. Теперь то же самое давайте сделаем на серверной стороне. Напишем сервлет, который в ответ на get-запрос с текстом получает изображение в котором этот текст будет закодирован. Такой сервис можно использовать чтобы разместить у себя на сайте любой qr-код картинкой с src="url_сервиса/?code=текст".
Особенных открытий в такой реализации нет, разве что преобразование двумерной матрицы в картинку делаем иначе чем в Android, используя java.awt.* классы.

воскресенье, 15 июля 2012 г.

Реализация Drag and Drop в Android

Touch-интерфейсы дают нам удивительную возможность "прикоснуться к приложению", манипулировать с элементами на экране самым естественным для человека способом. И нам, разработчикам, грех не использовать такую возможность. Давайте разберёмся, как максимально просто реализовать Drag&Drop в нашем приложении.
В двух словах уточним, какое поведение элемента интерфейса мы хотим получить. Есть пара белых ImageView и один синий прямоугольник. Та из белых картинок, которой мы коснулись будет следовать за пальцем, пока мы её не отпустим. Если мы отпустим её над синим прямоугольником, прямоугольник станет красным, и картинка останется на месте. Если за пределами - картинка вернётся на исходную позицию.
Основная наша цель - сделать всё максимально просто. Кроме Layout-a, описывающего начальное состояние интерфейса, мы напишем всего один класс в сотню строк кода. Итак приступим.

пятница, 13 июля 2012 г.

Помехоустойчивое кодирование: реализуем алгоритм Хэмминга на java

В давние суровые времена, окутанные романтикой и легендами, программисты решали совсем другие задачи. Чего стоит, например, передача данных. Мы, скромные наследники гениев, работаем как правило не ниже уровня сокетов. А им приходилось измерять уровни сигнала, а ошибки измерений корректировать. Остались нам от них в наследство десяток алгоритмов коррекции ошибок разной сложности и мощности. Алгоритм Хэмминга достаточно "компромиссный" вариант. При относительной простоте он весьма эффективен: позволяет скорректировать ошибки в один бит на блок и обнаружить ошибки в два бита. Зачем нам может понадобиться его использовать? Например мы решили организовать передачу данных между двумя устройствами "нетрадиционным" способом. Сходу можно придумать три способа передачи данных между двумя Android-смартфонами: с помощью экрана и камеры, динамика и микрофона, вибрации и акселерометра. Как это применить - дело вашей фантазии, а вот как решить проблему коррекции ошибок при этом - подскажет моё маленькое приложение. Давайте рассмотрим реализацию алгоритма подробнее.