Перехват всех входов с внешней (блютуз) клавиатуры

Вопрос

Я хотел бы поймать/просмотреть все вводы с клавиатуры, которые получает наше приложение.

Было бы достаточно, если бы ловились только вводы с внешней клавиатуры.

Я нашел примеры решений, такие как регистрация наблюдателя уведомлений для UITextViewTextDidChangeNotification и UITextFieldTextDidChangeNotification, но, поскольку для этого требуется, чтобы TextView или TextField был текущим первым ответчиком, это не охватывает все наши потребности.

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

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

Предыстория:

У меня есть приложение для iPhone, которое сканирует штрих-коды для идентификации объектов в нескольких разных режимах.

В настоящее время мы сканируем штрих-коды либо камерой (используя библиотеку zbar), либо сканером штрих-кодов, сертифицированным MFI. Для поддержки большего количества устройств (например, iPad) мы изучаем другие способы считывания штрих-кодов.

Один из рассматриваемых нами классов устройств — сканеры Bluetooth, которые идентифицируются как HID-клавиатура. Это было бы отличным дополнением, поскольку его можно было бы использовать с различными продуктами и производителями.

Чтобы


person nj.    schedule 10.10.2013    source источник
comment
Вы должны использовать частный API. см. stackoverflow.com/questions/15629514/   -  person storoj    schedule 10.10.2013
comment
@сторой Спасибо! Даже если это довольно облом :) Если у вас есть хорошие ссылки на то, почему это невозможно сделать без частных API, вы можете опубликовать их как ответ, и я отмечу это как ответ.   -  person nj.    schedule 10.10.2013


Ответы (2)


Похоже, что использование функций IOHID** не может быть отклонено рецензентами AppStore, потому что IOKit является «структурой белого списка» (Отклонит ли Apple приложение для Mac OS, использующее платформу IOKit?)

Таким образом, вы действительно можете попробовать использовать функцию обратного вызова из этой темы IOHIDEventSystemClientScheduleWithRunLoop с EXC_BAD_ACCESS, надеюсь, что помогает! Я использовал этот код, и он работает, даже если ваше приложение находится в фоновом режиме (просто установите специальный фоновый режим), фиксирует все системные сенсорные и клавиатурные события.

person storoj    schedule 11.10.2013
comment
Похоже, путь. Я еще не подтвердил, что это работает, но похоже, что это правильный путь. Спасибо! - person nj.; 14.10.2013

Другой вариант для iOS 7 и более поздних версий — использовать объявление метода keyCommands для текущего контроллера представления. Он может перехватывать специальные комбинации клавиш. Недостатком является то, что вам нужно будет явно объявить, что вы ищете.

Я ответил на свой вопрос здесь о получение специальных символов из 2D-штрих-кодов со сканеров, подключенных в HID-режиме.

person sfaxon    schedule 06.08.2014
comment
Звучит хорошо, я посмотрю на это и посмотрю, может ли это решить нашу проблему. - person nj.; 07.08.2014