20 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Нативная поддержка для устройств ввода в Android своими руками

Нативная поддержка для устройств ввода в Android своими руками

Данная тема является продолжением статьи //4pda.ru/2014/12/12/190359/
Здесь обсуждаем способ создания нативной поддержки для устройств ввода и делимся готовыми решениями.

1. Создание файла с VID и PID
Подключаем наше устройство ввода и запускаем приложение USB Device Info. Нас интересует вкладка Linux, в которой выбираем своё устройство (у меня оно было последним в списке) и ищем значения строчек Vendor ID и Product ID. В моём случае это были 0c45 и 7700 соответственно.

Так же VID и PID можно посмотреть подключив устройство к ПК.

Для Bluetooth устройств:
Узнать эти значения для Bluetooth девайсов можно открыв файл /proc/bus/input/devices.

Копируем любой файл из /system/usr/keylayout на sdcard и переименовываем его в соответствии с полученными данными, для моего джойстика название получилось таким: Vendor_0c45_Product_7700.kl. (Обратите внимание, что регистр букв имеет значение)

2. Получение кодов кнопок
Запускаем приложение KeyTest и, вооружившись бумагой и карандашом, начинаем поочерёдно нажимать кнопки на устройстве, записывая цифры, высвечивающиеся после scanCode=. Я записывал коды, располагая их на бумаге, как кнопки на геймпаде.

Из программы можно выйти только по кнопке «Домой».

ВНИМАНИЕ!
Если Геймпад видно в первом шаге, но кейтест не реагирует на нажатия, возможно, у вас отсутствует нужный модуль в ядре – скажите “спасибо” автору прошивки.
Но не отчаивайтесь, есть возможное решение Нативная поддержка для устройств ввода (Пост wm-hater #52134473)

3. Маппинг кнопок
Теперь, когда стали известны коды всех клавиш, необходимо прописать их функции. Тут есть два пути:
а) найти среди имеющихся в Android конфигов устройство, максимально приближенное к вашему, и просто изменить в нём коды кнопок, скопировав содержимое в свой файл;
б) прописать все самому.
Я пошёл по второму пути, ибо мой джойстик имеет только крестовину управления и четыре кнопки. Для начала нужно понять синтаксис файла раскладки, он очень прост:

key код_кнопки действие_кнопки

Но тут возник вопрос: а какие действия кнопок писать в конфиге? За много лет использования различных геймпадов на Android я для себя определил, что самый универсальный конфиг — это раскладка от Sony Xperia Play, она одинаково хорошо ведёт себя как в играх, так и в интерфейсе системы.

Ok Google, key mapping for Xperia Play

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

Прописываю свои кнопки (помните листок с карандашными записями? Самое время найти его. ):
. ВНИМАНИЕ .
Нужен текстовый редактор с поддержкой unix кодировки!
Блокнот из состава Windows НЕ подойдет ,
Используйте, к примеру, Notepad++

4. Момент истины
Сохраняем наш файл и копируем его в папку /system/usr/keylayout. Выставляем права -rw -r -r (644). Перезагружаем устройство (сам я этого не делал, просто заблокировал и разблокировал, но для чистоты совести и эксперимента обязан был это написать).

Подключаем наше устройство, и если всё сделали правильно, тут же сможете «крестовиной» перемещаться по меню Android. Кнопка, на которую назначили DPAD_CENTER, будет кнопкой выбора, а BUTTON_B — кнопкой «назад».

Q: Все прописываю верно, но конфиг не цепляется.
А: Если вы пропишете коды действий с ошибкой, например:
key 123 BUTTON_HOME вместо key 123 HOME
то система будет считать этот файл ошибочным.
Самый лучший способ проверить подхватывается ваш kl файл системой или нет – стереть все кейкоды или закомментировать их знаком #:
# key 123 BUTTON_HOME
Если файл подхватился – никакой реакции на кнопки не будет, но в KeyTest все будет отображаться.

Q: Все прописываю верно и без ошибок но все или часть кнопок не работают.
А: Попробуйте прописать scancode в hex формате: Нативная поддержка для устройств ввода (Пост romanctest #69194647)
Q: Дуалшок 4 постоянно отваливается или работает с задержкой.
А: Нативная поддержка для устройств ввода (Пост maxmergov #81264882)

Нативная поддержка для устройств ввода в Android своими руками

Многие владельцы Android-устройств сталкивались с тем, что подключаемые по USB устройства ввода, такие как джойстики, клавиатуры, мышки и т.д., не всегда работают, как положено. То кнопки джойстика перепутаны, то медиаклавиши на клавиатуре или мышке не работают и т.п. В моём случае геймпад определялся, как клавиатура, и приходилось использовать программный «костыль», типа USB BT Joystick center или Tincore keymapper. Которые, используя свой IME (метод ввода в Android), позволяют переназначить кнопки. Также использовалась программа PerApp, которая может автоматически переключать IME в зависимости от активного приложения. Данный способ меня раздражал тем, что при включении всего этого хозяйства я не мог пользоваться любимой клавиатурой, а при выключении нельзя было перемещаться джойстиком по интерфейсу системы. Выход я видел только один: сделать нативную поддержку своего геймпада в системе или, грубо говоря, «драйвер».

Первым делом я заглянул в папку /system/usr/keylayout, где обнаружил файлы с очень красноречивыми названиями: Vendor_xxxx_Product_xxxx.kl, где xxxx – это набор цифр и букв. Как уже многие догадались, это не что иное, как идентификаторы устройства (VID и PID). Открыв первый по списку файл в текстовом редакторе, я почти закричал «БИНГО!». Но не закричал, потому что на работе нужно работать, а не джойстики к планшету прикручивать. А увидел я вот что:

# Classic NES Controller

key 289 BUTTON_A

key 290 BUTTON_B

key 297 BUTTON_START

key 296 BUTTON_SELECT

axis 0x00 HAT_X

axis 0x01 HAT_Y

Да-да, это настройки кнопок для джойстика от Nintendo (Денди). Просмотрев соседние файлы, я обнаружил конфиги для различных устройств. В основном игровые контроллеры (Play Station 3, X-box, ASUS gamepad и другие), но есть и клавиатуры.

Читать еще:  5 способа узнать, где находится человек по номеру телефона

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

От теории к практике

  • устройство на Android 4+ (проверял только на 5.0 и 4.4);
  • поддержка устройством USB OTG;
  • наличие root-доступа;
  • файловый менеджер с поддержкой root (в моём случае это Total Commander);
  • текстовый редактор (в моём случае это опять Total Сommander);
  • лист бумаги и карандаш;
  • USB Device Info (для определения свойств устройства);
  • KeyTest (для отображения кодов кнопок устройства).

1. Создание файла с VID и PID

Подключаем наше устройство ввода и запускаем приложение USB Device Info. Нас интересует вкладка Linux, в которой выбираем своё устройство (у меня оно было последним в списке) и ищем значения строчек Vendor ID и Product ID. В моём случае это были 0c45 и 7700 соответственно.

Копируем любой файл из /system/usr/keylayout на sdcard и переименовываем его в соответствии с полученными данными, для моего джойстика название получилось таким: Vendor_0c45_Product_7700.kl. (Обратите внимание, что регистр букв имеет значение)

2. Получение кодов кнопок

Запускаем приложение KeyTest и, вооружившись бумагой и карандашом, начинаем поочерёдно нажимать кнопки на устройстве, записывая цифры, высвечивающиеся после scanCode=. Я записывал коды, располагая их на бумаге, как кнопки на геймпаде. Из программы можно выйти только по кнопке «Домой».

3. Маппинг кнопок

Теперь, когда стали известны коды всех клавиш, необходимо прописать их функции. Тут есть два пути:

а) найти среди имеющихся в Android конфигов устройство, максимально приближенное к вашему, и просто изменить в нём коды кнопок, скопировав содержимое в свой файл;

б) прописать все самому.

Я пошёл по второму пути, ибо мой джойстик имеет только крестовину управления и четыре кнопки. Для начала нужно понять синтаксис файла раскладки, он очень прост:

key код_кнопки действие_кнопки

Но тут возник вопрос: а какие действия кнопок писать в конфиге? За много лет использования различных геймпадов на Android я для себя определил, что самый универсальный конфиг — это раскладка от Sony Xperia Play, она одинаково хорошо ведёт себя как в играх, так и в интерфейсе системы.

Ok Google, key mapping for Xperia Play

Key code constant scancode

X 23 KEYCODE_DPAD_CENTER 304

circle 4 KEYCODE_BACK 305

square 99 KEYCODE_BUTTON_X 307

triangle 100 KEYCODE_BUTTON_Y 308

up 19 KEYCODE_DPAD_UP 106

down 20 KEYCODE_DPAD_DOWN 105

left 21 KEYCODE_DPAD_LEFT 103

right 22 KEYCODE_DPAD_RIGHT 108

select 109 KEYCODE_BUTTON_SELECT 314

start 108 KEYCODE_BUTTON_START 28

L trigger 102 KEYCODE_BUTTON_L1 310

R trigger 103 KEYCODE_BUTTON_R1 311

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

Прописываю свои кнопки (помните листок с карандашными записями? Самое время найти его. ):

key 147 DPAD_CENTER

key 149 BUTTON_B

key 148 BUTTON_Y

key 146 BUTTON_X

key 157 DPAD_DOWN

key 145 DPAD_LEFT

key 155 DPAD_UP

key 156 DPAD_RIGHT

Но и тут не обошлось без нюансов. У Sony на кнопку «круг» (circle) назначено действие KEYCODE_BACK (привычная нам кнопка «назад»). Несложно догадаться, что нажатие такой кнопки в игре может вызвать нервный срыв. А всё дело в том, что во время игры на Xplay эта кнопка принимает альтернативное значение — KEYCODE_BUTTON_B. Вот её мы и пропишем.

4. Момент истины

Сохраняем наш файл и копируем его в папку /system/usr/keylayout. Выставляем права -rw -r -r (644). Перезагружаем устройство (сам я этого не делал, просто заблокировал и разблокировал, но для чистоты совести и эксперимента обязан был это написать).

Подключаем наше устройство, и если всё сделали правильно, тут же сможете «крестовиной» перемещаться по меню Android. Кнопка, на которую назначили DPAD_CENTER, будет кнопкой выбора, а BUTTON_B — кнопкой «назад».

Итоги

  • на планшете стало на две программы меньше;
  • джойстик теперь реальный Plug and Play;
  • можно играть в игры с маркета без танцев с бубном (если игра поддерживает геймпады);
  • можно перемещаться по интерфейсу Android;
  • свои настройки для каждого устройства;
  • скорость отклика кнопок повысилась (плацебо?).

Полезная информация

Настроить можно не только нажатие, но и смещение по осям (аналоговые контроллеры, мышки).

5 приложений, которые нужно удалить с Android прямо сейчас

Погодные приложения, оптимизаторы, дефолтный браузер — от этого всего лучше избавиться.

Facebook и другие социальные сети

Социальная сеть Facebook является сегодня самой популярной в мире, поэтому неудивительно, что соответствующее мобильное приложение установлено у огромного количества пользователей. Мобильный клиент позволяет вам получать уведомления о новых лайках, постить фотки своей еды и всегда оставаться на связи с друзьями. Однако взамен это приложение потребляет огромное количество системных ресурсов и значительно уменьшает срок работы мобильного гаджета от батареи. Согласно ежегодному отчёту App Report 2015 AVG Android App Report, именно мобильный клиент Facebook занимает верхние строчки в хит-параде самых прожорливых программ на платформе Android.

Альтернатива. Используйте мобильную версию Facebook в любом современном браузере. Функциональность отличается ненамного, зато отсутствуют раздражающие уведомления и стремительно тающая батарея.

The Weather Channel и другие погодные приложения

The Weather Channel — отличный пример того, как на самой простой функции — отображении прогноза погоды — разработчики умудряются выстроить целый мегакомбайн. Здесь вы увидите и анимированные обои, и метеорологические карты, и букет интерактивных виджетов, и бог знает что ещё. Всё это хозяйство сидит в оперативной памяти устройства, каждые пять минут стучится в интернет и, разумеется, самым бессовестным образом съедает заряд вашей батареи.

Читать еще:  Google Family Link — официальный родительский контроль на телефоне Android

Альтернатива. Выгляните в окошко — вы получите гораздо более надёжную информацию, чем то, что показывает виджет рабочего стола. Если необходим прогноз, то Google предоставит вам самое надёжное предсказание на неделю вперёд.

AntiVirus FREE и другие антивирусные программы

Дискуссия о том, нужны ли антивирусные программы на устройствах под управлением Android, иногда бывает довольно горячей. Я придерживаюсь мнения, что если вы не получаете root-права на устройстве и не устанавливаете взломанные программы из сторонних сомнительных источников, то антивирус вам не нужен. Компания Google бдительно следит за содержимым своего магазина и моментально удаляет из него все потенциально опасные элементы, поэтому всегда активный мониторинг антивируса будет только зря тормозить ваш смартфон или планшет.

Альтернатива. Если возникли всё-таки сомнения в здоровье гаджета, то установите антивирус, просканируйте, а затем удалите его.

Clean Master и другие оптимизаторы системы

Вера в чудеса является самой главной движущей силой для распространения разных «очистителей» и «оптимизаторов». Мол, сотни лучших программистов Google не смогли довести свою систему до ума, а вот этот изобретатель-одиночка взял и сделал! Спешим вас расстроить: большинство подобных приложений либо вообще ничего не делают, либо наносят только вред. Очистить кэш, удалить остатки старых программ можно и встроенными системными инструментами. Очистка же памяти на самом деле только замедляет запуск программ и работу Android вместо обещанного создателями утилит ускорения системы.

Альтернатива. Используйте имеющиеся в Android инструменты для очистки кэша приложений. Забудьте об оптимизации памяти.

Дефолтный браузер

Некоторые производители и разработчики сторонних прошивок снабжают свои творения специальными версиями браузера. Как правило, в них намертво вшиты ссылки на сайты рекламодателей и другой ненужный вам контент. Кроме этого, никто не может поручиться, что такой браузер не сливает вашу информацию налево. Лучше никогда не использовать подобную программу и вообще, если это возможно, удалить её из системы.

Альтернатива. Для Android существуют десятки хороших браузеров, но самым надёжным и быстрым является, несомненно, Google Chrome. Он функционален, обладает поддержкой самых современных веб-технологий, умеет экономить мобильный трафик и обладает простым и понятным интерфейсом.

А какие приложения вы считаете самыми вредными на платформе Android?

Подключаем к Android устройствам практически любую периферию

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

Перечисленную выше периферию можно подключить практически к любому Android устройству, который поддерживает USB Host через специальный переходник — он называется USB OTG. Однако, чтобы подключить другую периферию (джойстик, Wi-Fi адаптер, 3G модем, HDD диск) нужно производить уже некоторые манипуляции — иногда программные, а иногда и «железные».

Активный USB OTG

Активный OTG это кабель с дополнительным питанием. Некоторые модели телефонов, например, телефоны Motorola, которые поддерживают Lapdock, требуют для подключения любой периферии именно активный OTG. Другие же нуждаются в нем только для подключения особо «прожорливых» устройств, таких как например жесткий диск.

USB OTG с дополнительным питанием в продаже довольно трудно найти. Гораздо проще либо самостоятельно переделать обычный переходник, либо купить активный USB хаб.

Если же вы решите подключить джойстик к Android устройству старой версии (4.0 или 4.1), то вам придется устанавливать драйвера для него. А для этого вам нужно будет найти исходники ядра, и перекомпилировать его, предварительно поставив галочки в конфигах напротив поддержки игровых манипуляторов. Хотя для специалиста по созданию мобильного ПО это рядовая задача, сделать неподготовленному человеку это довольно сложно. Данная процедура должна выполняться в Linux среде, вы должны установить целый пакет необходимых библиотек, а также уметь исправлять ошибки компилятора по мере их появления. Поэтому самым верным шагом будет найти уже собранное кем-то ядро с уже включенной поддержкой геймпадов.

С Wi-Fi адаптерами дела обстоят почти также, но помимо перекомпиляции ядра, для некоторых моделей адаптеров вам нужно будет дополнительно найти прошивку. А когда вы пересоберете ядро и найдете все необходимые файлы, то управлять внешним Wi-Fi адаптером через привычный интерфейс у вас никак не получится — придется обходиться эмулятором терминала. Лично я потратил около двух дней чтобы заставить работать внешний адаптер на своем Motorola Atrix.

Хоть Android и считается довольно удобной операционной системой, но несколько более неординарные задачи выполняются на этой ОС довольно сложно. Особенно это касается поддержки оборудования, заранее не предусмотренного разработчиком. Если вы решите подключить к своему телефону тот же внешний Wi-Fi адаптер, то готовьтесь к тому, что вам придется изрядно повозиться и перечитать довольно много «мануалов».

Настройка геймпада на Android — практическое руководство

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

В зависимости от вида джойстика, подключение можно выполнить одним из трех способов:

  • Через USB-кабель и специальный переходник.
  • Напрямую по каналу Bluetooth.
  • С помощью приложения по Bluetooth, для джойстиков от игровых приставок.
Читать еще:  Крутая мультиварка Redmond, которой легко управлять с помощью СМАРТФОНА

Каждый метод имеет свои нюансы и тонкости настройки, поэтому остановимся на каждом из них более подробно.

Подключение через USB-кабель

Разобраться, как настроить джойстик на Андроид с использованием USB-шнура, проще всего. Для подключения потребуется сам кабель, а также Micro-USB переходник, который вставляется в соответствующий вход на мобильном телефоне.

Дальнейшие действия зависят от того, поддерживает ли игра управление с помощью геймпада. Если да, то никаких дополнительных настроек производить не нужно.

В противном случае следует посетить Play Market и установить приложение для настройки контроллера. Например, Tincore Keymapper.

Подключение по Bluetooth

Специально созданные для работы с Андроид-устройствами джойстики зачастую не имеют проводов и подключаются по каналу Bluetooth. Также для удобства использования они могут быть оснащены специальной подставкой-держателем для смартфона или планшета. Процесс настройки выполняется по следующему сценарию:

    Открыть настройки мобильного устройства и активировать Bluetooth. Также это можно сделать, опустив шторку быстрых настроек, проведя пальцем от верхней части экрана вниз.

Подключение джойстиков игровых приставок

У многих владельцев приставок Xbox и Sony PlayStation возникает вопрос «как настроить геймпад на подключение к Андроид-телефону или планшету?». Выполнить задуманное можно по беспроводному методу с использованием Bluetooth.

Процедура осуществляется в следующей последовательности:

  • Установить на смартфон приложение Sixaxis Compatibility Checker, которое позволит проверить устройство на совместимость с геймпадом. Если проверка дала положительный результат, приступаем к следующему шагу.
  • Скачать и установить программу SixaxisPairTool на персональный компьютер и приложение Sixaxis Controller на телефон.
  • Подключить джойстик к USB-входу компьютера, используя соответствующий шнур.
  • Дождаться, пока программа распознает подключенное устройство и выдаст MAC-адрес, состоящий из 12 цифр.
  • Запустить приложение Sixaxis Controller, разрешив ему получение прав суперпользователя.
  • Подождать, пока на экране появится локальный адрес Bluetooth-канала.
  • Вписать полученное значение в программу на компьютере в поле «Change Master». Нажать кнопку «Update».
  • Отключить геймпад от шнура и активировать его работу клавишей PS.
  • Нажать кнопку «Выбор метода ввода» в приложении и выбрать Sixaxis Controller.
  • Зайти в настройки по нажатию на три вертикальные точки в правом верхнем углу, выбрать раздел «Настройки джойстика». Поставить галочку напротив строки «Включить джойстик».

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

Как подключить Андроид как джойстик?

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

Для этого потребуется сам смартфон или планшет, компьютер с Windows 7 и выше, а также установленная на нем игра, поддерживающая соответствующий тип управления.

Процесс настройки выполняется по такому алгоритму:

  • Скачать и установить программу, перейдя по ссылке: https://www.monect.com/pc-remote.
  • Открыть Play Market и установить приложение PC Remote.

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

Для максимального комфорта рекомендуется подключать устройства с диагональю экрана не менее 5 дюймов.

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

Android Lesson 15. Пишем свой адаптер списка в Android.

В одном из предыдущих уроков, посвященных программированию под ОС Android, мы познакомились с элементом ListView, представляющим собой простой список. Для заполнения списка музыкальных групп мы воспользовались готовым классом ArrayAdapter.Но теперь мы хотим изменить представление элементов списка и выводить не только их название, но и год основания групп, а также имена их основателей.

Основной макет – обычный список. Его XML-представление ниже.

Итак, первое, что нам нужно сделать – это подготовить ресурсы. Так как мы уже умеем работать с базами данных, то это будет несложно. Так как организация работы с БД не является темой данной статьи, то пробежимся по ней совсем коротко.

Создаем класс-наследник SQLiteOpenHelper, содержащий два основных метода – onCreate() и onUpdate(), которые будут вызваны при создании и обновлении БД соответственно. Код приведен ниже. В нашей БД мы будем хранить сведения о музыкальных коллективах, а именно: название группы, год основания и имя лидера группы.

Также создадим простой класс Group для удобства работы с данными.

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

Теперь перейдем к написанию своего адаптера. Ну наконец-то! Первое, что необходимо сделать – определить, как должен выглядеть элемент списка и создать соответствующий файл XML. Это делается точно также, как и при создании любого другого макета. Предположим, мы хотим сделать нечто подобное:

Код файла groups_item.xml приведен ниже.

Теперь нам нужно наследоваться от класса BaseAdapter для реализации своего адаптера.

Наш адаптер переопределяет методы суперкласса. В методе getView() мы выполняем основную часть работы, а именно: инициализируем разметку, соответствующую элементу списка и устанавливаем нужные значения текстовым меткам для каждого конкретного элемента в списке. Также наш адаптер имеет конструктор, в который мы передаем список, содержащий все группы из БД.

Теперь осталось реализовать метод onCreate() нашей основной активности. Получаем доступ к БД, список групп и устанавливаем адаптер для нашего списка методом setAdapter(). Теперь уже наш адаптер!

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: