Android ir remote with learning

Разрабатываем ИК-пульт ДУ для фотоаппарата

После прочтения статьи на Хабре «Делаем ИК-пульт ДУ для фотоаппарата», захотелось поделиться опытом разработки ИК-пульта ДУ для фотоаппаратов в виде приложения под Android (от идеи до публикации).

Купив зеркальный фотоаппарат, через некоторое время осознаешь потребность в ручной настройке, штативе и бесконтактном спуске затвора, который осуществляется с помощью дополнительного оборудования, предлагаемого фирмой-производителем. Но, осознав, что в твоем Android-телефоне есть ИК, которым можно удаленно спустить затвор, идешь в Google Play. Там поиск по «саmera remote» сразу выдает массу приложений, среди которых есть подходящие.

Скачиваешь, пробуешь — да, работают, но… удобство использования и интерфейс оставляют желать лучшего. Кроме перечисленного, в моей модели фотоаппарата сильно не хватает функции подсчета экспопары для съемки ночью. Поэтому решил реализовать собственное приложение, чтобы понять, что такое Android, и с чем его едят.

Тестирование ИК на телефоне

Реализация приложения, которое выполняет бесконтактный спуск затвора, заняла не больше одного часа. За это время было создано Activity с одной кнопкой и найден способ отправки сигналов на камеру, который выглядит примерно так:

Что только что произошло? Была создана «программа», выполняющая функцию устройства, которое мне хотела продать фирма Nikon за 30$.

Я думал «Что может быть проще, чем реализация одной кнопки?«, но не тут-то было.

Анализ конкурентов привел к длинному списку их возможностей и недостатков. Приведу только основные.

Возможности:

  • можно установить задержку перед первым снимком, длительность выдержки камеры в blub режиме, задержку между последующими снимками, количество снимков
  • HDR режим (Bracketing) — съёмка нескольких кадров с разным значением выдержки
  • срабатывание по звуку
  • поддержка большого числа камер и устройств

Недостатки:

  • оставляющий желать лучшего дизайн и простота использования, или хороший дизайн, но мало возможностей
  • работа в главном потоке

Требования к приложению:

  • сделать бесплатное и без рекламы приложение, которое не стыдно показать другим
  • включить все возможности конкурентов
  • реализовать калькуляторы экспопары и глубины резкости
  • добавить отображение времени заката и рассвета (золотого часа)
  • обеспечить работу в фоновом процессе
  • подключить звуковые уведомления
  • разработать наиболее быстрый и интуитивный дизайн для основных возможностей
  • не забыть о «вау-эффекте»

Некоторые задачи выходят за рамки пульта ДУ, но мне хотелось попробовать как можно больше возможностей Android.

Реализация или «Шагая по подводным минам»

Работа с графикой

При разработке я придерживаюсь философии: «Больше векторной, меньше растровой графики». Поэтому на весь проект потребовалось «две» растеризированных картинки — иконка приложения и иконка уведомления (не считая изображений для Google Play). Все остальное — бесплатные стоковые шрифты и шрифты-иконки. Благодаря этому, интерфейс выглядит одинаково качественно на большинстве устройств, независимо от разрешения экрана.

В целях достижения максимального быстродействия приложения, я обычно отказываюсь от анимации. Но ее отсутствие делало работу приложение неочевидной для конечного пользователя. Поэтому, и для достижения «вау-эффекта» анимация присутствует. В связи с тем, что взаимодействие с приложением происходит вокруг одной кнопки, она была максимально стилизована, и процесс съемки отображен вокруг нее.

После работы с WPF и Silverlight, мне показалось, что Android содержит очень скудный набор графических примитивов для построения независимых векторных объектов (объекты, которые сами знают как перерисовывать себя — без необходимости рисовать их на канве вручную). Поэтому пришлось сделать несколько итераций реализации кольцевого ProgressBar-а.

Странность: Если на некоторых устройствах вызывать у объекта ClipDrawable функцию setRotation() с углами отличными от 0, 90, 180,…, в котором есть другие графические объекты, они становятся полностью видимыми вне зависимости от ClipDrawable.setLevel().

Читайте также:  Лаунчер для андроид zte

Работа с уведомлением

Хотелось создать уведомление, и в нем менять состояние прогресса съемки. Но вместо этого приходится постоянно пересоздавать его, из-за ограничений Android. Скорость, с которой меняется время, оставшееся до следующего срабатывания, заставляет делать это часто, что привело к невозможности использовать иконку с большим разрешением.

Работа с аппаратным обеспечением

Разрабатывать такого типа приложение в стандартном эмуляторе сложно и долго, в более шустрых аналогах — просто сложно. Наличие лопаты Samsung S4, позволило проще работать с аппаратным обеспечением устройства. На эмуляторах добиться поддержки ИК не удалось, а с микрофоном были очень большие тормоза, после которых уровень звука вел себя не менее непредсказуемо.

После релиза, захотелось доработать другие, более загадочные способы «нажатия на кнопку», для простых смертных пользователей. Идея заключалась в спуске затвора фотоаппарата не касаясь телефона, и в наилучшем случае с выключенным дисплеем.

Сценарий демонстрации: зафиксировать камеру вдалеке и положить «выключенный» телефон перед собой, после чего, от «магического» жеста рукой срабатывает камера. Для большего эффекта можно включить вспышку. Проверено, смотрится с удивлением и восклицанием «Вау!» (последнее зависит от эмоциональности конкретного человека).

Первое, что пришло в голову — использовать, продемонстрированные впервые Air Gestures в Samsung S4. Поиск SDK привёл к разочарованию: Devices with Android 4.3 Jelly Bean (API level 18) or higher support Gesture except Galaxy S4 due to a hardware issue. Но, я вспомнил про акселерометр и, позднее, про освещенность.

Вначале реализовал срабатывание при переходе устройства с вертикального положения в горизонтальное. Все работало отлично, пока не отключил телефон от компьютера. При выключении экрана акселерометр «засыпает», т.е. сигналы о изменении положения устройства в пространстве перестают генерироваться. Устранить этот эффект ни работой в фоновой службе, ни настройками энергосбережения не удалось.

Реализовал срабатывание на резкое изменение освещенности. Этот сенсор, не «засыпает» при выключенном дисплее, но количество генерируемых сигналов заметно уменьшается. Именно благодаря наличию этого сенсора в устройстве, написанный ранее сценарий работает.

Была идея подключить камеры для распознавания, например, подмигивания. Но, найти вменяемую бесплатную библиотеку для этого не смог.

Процесс в целом

В большинстве случаев, платформа Android ведет себя вполне ожидаемо. Не возникло проблем при определении местоположения, получении данных с сервера прогноза погоды, реализации жизненного цикла приложения, использовании фоновой службы и работе с базой данных.

В связи с работой, пришлось сменить Visual Studio на Eclipse, что периодически бесит и по сей день. Но, для разработки приложения установил Android Studio с надеждой, что «Studio» в названии, что-то да значит. С первых созданных методов и переменных понял, что это то, чего я так ждал: проверка правописания кода, умный autocomplete, огромное количество подсказок и многое другое. Спасибо разработчикам за качественный продукт!

Публикация

Создал аккаунт, заплатил взнос, прочитал рекомендации, настроил релиз-версию, создал подписанное приложение, подготовил описание на нескольких языках (EN, RU, UA, NO), сделал фотографии приложения и выложил как бета-версию.

Неожиданностью стало обязательное изображение для Google Play размером 1024х500, хотя в статьях писали, что это «не помешает».

При компиляции релиз-версии использовался ProGuard, который нарушил работу определенной части кода, основанного на названиях классов, которые он успешно обфусцировал. Проблема была обнаружена не сразу, поскольку при запуске релиз-версии, параметр «debuggable» равен «false». Ошибки выскакивали, обрабатывались и всё работало дальше.

В связи с тем, что приложение для микрорынка, я не планировал писать статью на Хабр, если бы не проблемы с ИК. Вначале писал на форумы для фотографов, но результат — лишь бан. В основном помог youtube. После чего появились первые реальные пользователи, а с ними и проблемы.

Детально про мучения работу с ИК-портом

Возвращаясь к коду, для отправки импульсов:

Все было хорошо, пока не оказалось, что поддержка ИК, появилась в Android только начиная с API версии 19. Что было до этого? Было выпущено достаточно много устройств с ИК, для управления которыми, производители либо создавали свои библиотеки (HTC OpenSense IR API и LG QRemote IR SDK) или публиковали пример кода для работы с их ИК (Samsung). Что произошло после? Вышли новые версии, и способ передачи сигналов стандартизированный в API 19 поменялся.

Удалось заставить работать приложение с ИК портами на Samsung-ах с версиями Android KitKat и Lollipop. После многих попыток удаленного тестирования с HTC One M8, понял, что самому реализовать поддержку других устройств будет очень сложно. Поэтому, я создал проект на GitHub-е, который может скачать любой желающий: AndroidInfraRed.

Читайте также:  Андроид для лада гранта лифтбек

Немножко скучной теории

Для дистанционного управления устройством с помощью ИК, вам необходимы: передатчик и последовательность сигналов, которую необходимо отправить. В моем случае, устройство — Nikon D7100, передатчик — Samsung S4.

Последовательность задается двумя параметрами: частотой (Hertz) и паттерном, который представляет собой некую временную последовательность наличий/отсутствий сигнала заданной частоты.

Пример (для Samsung устройств с версией Android >= 4.4.3)

  • Frequency: 40000
  • Pattern: 125, 100, 150, 75, .

Пример (для Samsung устройств с версией Android = 4.4.3). Что бы перейти от микросекунд к циклам, необходимо каждый элемент паттерна умножить на частоту и поделить на миллион (количество микросекунд в секунде). Это обратная операция, к той, которая конвертирует заданные последовательности под Android >= 4.4.3.

5. Передаем последовательность сигналов на устройство

В конкретном примере, посылаем заданные сигналы в случайном порядке.

Комментарии

Проект AndroidInfraRed — почти готовое решение для дистанционного управления устройствами с помощью ИК. Единственное чего не хватает — протестировать и наладить работу с HTC, LG, Sony… Я очень надеюсь, что на Хабре найдутся люди со смартфонами с ИК, которые помогут данному проекту, и тем, кто в будущем захочет добавить в свое приложение работу с ИК.

Результат

В результате получилось создать приложение, которое покрывает все мои потребности для удаленного управления камерой и процесса фотографирования в целом. Жаль, что преимущества данного приложения могут оценить лишь обладатели Samsung.

Источник

The 3 Best IR Uni­ver­sal Remote Apps for Android Devices

Ashish Mundhra

05 Jan 2016

AC, TV, Set-top box, smart tv and even my camera, have an IR remote that I use on a daily basis. Now that I have recently acquired a phone with an IR blaster, I was looking out for apps in the Google Play Store using which I could use my Android phone as a universal remote.

One remote app to control them all | Shutterstock

The advantage of using a phone as a universal remote control is that it’s with you all the time and you don’t have to look for it under the sofa cushions and pillows. Also, it looks cool and sometimes, it’s all about the swag. So here’s a list of 3 of the best apps you can use on your Android IR blaster to control anything and everything with an IR sensor.

Note: These apps might not work on all Android devices with IR blaster. Your phone manufacturer needs to enable IR hardware to be used by third-party apps.

1. AnyMote – Smart Remote Control

AnyMote – Smart Remote Control is one of the best universal remote available for Android. The major reason behind this is the amazing interface the app provides. It’s so easy to find the device you wish to configure the remote for. On the home page, you will find all the devices you can connect to and it also includes DSLR cameras and Air Conditioners.

Not only that, in the settings menu you can add automated tasks like mute the volume on the TV or Music System if you are getting an incoming call. You can also include IFTTT task in the app. The app has a lot of devices you can connect to and the chances to not finding one is minimal. But to help in such situations, you get the option to record your own remote.

In the option, you can customize your remote, add buttons to it and then sync the frequency using your default remote. Additionally, you also get to control smart devices that are connected using Wi-Fi.

What’s more, you can integrate Amazon Alexa with this remote app, thus taking you a step ahead in achieving your smart home dream. Though, you must enable the AnyMote skill in the Alexa app and pair it with your phone at the first place.

Having done that, you can pair it with the Echo and then ask it to send voice commands. The only issue with this setup is that the phone has to be in the direct line of sight with the product.

Читайте также:  Soul knight ios android

2. ASmart Remote IR

The previous remote is a featured packed app, but it can be too complex for some users. ASmart Remote IR hosts top brands and devices and you can not only control TV and Set Top Box, but also DSLR cameras and ACs. For better management, you can create different rooms with sets of remotes and easily switch between them using the tabs at the top.

Plus adding a new remote is as easy as pie. All you have to do is tap on the tiny Plus icon at the top right corner.

Personally, I liked the interface of the app. — it’s fluid and makes switching between remotes a walk in the park. Moreover, the option of getting the display remote for Air Conditioner is a killer addition.

3. SURE Universal Remote

Just in case you need another alternative to explore, you can try SURE Universal Remote. The app works with both, IR and Wireless devices. One thing I liked about the app is the ease with which you can switch between the remotes. You get tabs of the devices in the sidebar and then you can easily switch between them.

It’s a great app, since it works both with Wi-Fi and IR transmitters. You can buy IR transmitters online for a few dollars if your phone doesn’t have a built-in IR blaster.

What makes this smart remote app interesting is that you can also backup your remote settings and can share it with your friends. The app is free with ads and you can go for the pro version to get an ad-free experience.

Conclusion

These were the best apps for Android using which you can use your phone as a universal remote. Though there are a couple of other Android apps like Peel Universal Smart TV Remote, IR Universal Remote which does the same work, however, I found the above three to serve my needs the best.

If none of the apps work on your Android phone even if you have an IR blaster, please check with your phone manufacturer. It simply means they have not allowed third-party apps to use the hardware resource.

Last updated on 27 Jul, 2018
The above article may contain affiliate links which help support Guiding Tech. However, it does not affect our editorial integrity. The content remains unbiased and authentic.

How to Configure Letv eUI Remote to Work with Any IR Device

The Letv eUI # remote can work with other IR enabled devices. But how to make them all work can be tricky. Which is why we’ve covered it in here. Read on.

25 FAQs About Xiaomi Mi A1: Everything To Know

Got questions on the new # Xiaomi Mi A1? Check out this list of FAQs related to Xiaomi Mi A1!

Top 9 Must Have Apps for Android TV

Here is our pick of the 9 must-have apps for # Android TV

Samsung Galaxy Note8 Features: Love It or Hate It

Is the Samsung # Galaxy Note8 really flawless? Here, we explore the pros and cons of the Galaxy Note8. Read on!

Xiaomi Redmi 5A Pros and Cons: Should You Buy It?

Planning to buy the new # Xiaomi Redmi 5A? These # pros and cons might help you in making an informed decision. Read on!

21 FAQs About Xiaomi Redmi Y1: Everything to Know

Here’s all you need to know about the # Xiaomi Redmi Y1. Read on to know more!

16 FAQs About Huawei Honor 9i: Everything To Know

Planning to buy the new Huawei Honor 9i? There must be a ton of queries and questions in your head right now. We help answer the best ones!

25 FAQs About Xiaomi Mi Max 2: Everything To Know

Here’s a list of the top # Xiaomi Mi Max 2 FAQs. Check it out!

Did You Know

A typical infrared sensor uses a wavelength of 980m to send the signal to the receiver

Источник

Оцените статью