Подтвердить что ты не робот

Возможно ли создать службу Android, которая прослушивает аппаратные нажатия клавиш?

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

Из полу связанных примеров в Интернете я собрал следующую службу, но получаю сообщение об ошибке: "onKeyDown - undefined для типа Service". Означает ли это, что это невозможно сделать без переписывания Launcher, или есть что-то очевидное, что я не хватает?

public class ServiceName extends Service {

    @Override
    public void onCreate() {
        //Stuff
    }

    public IBinder onBind(Intent intent) {
        //Stuff
        return null;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN) {
        switch(keyCode) {
        case KeyEvent.KEYCODE_A:
            //Stuff
            return true;
        case KeyEvent.KEYCODE_B:
            //Stuff
            return true;

            //etc.
        }
        }

        return super.onKeyDown(keyCode, event);
    }
}

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

4b9b3361

Ответ 1

Насколько я знаю, KeyEvents могут обрабатываться только действиями, поскольку они являются интерфейсом для пользователя, нажимающего клавиши. Службы работают в фоновом режиме и не предназначены для реагирования на ввод пользователя. Это также причина предупреждения вашего компилятора "onKeyDown" undefined для типа Service ". Сервис или любой из них Суперклассы не реализуют интерфейс KeyEvent.Callback. В качестве обходного пути вы можете зарегистрировать Activity в своем AndroidManifest.xml, чтобы реагировать на определенные системные уведомления, такие как android.intent.action.SCREEN_ON. Когда кнопка питания нажата, чтобы включить экран, можно начать свою деятельность, инициализировав какую-либо услугу и вернитесь на задний план. Если это то, что вы намереваетесь сделать. Для возможных действий см. Intent docs.

Надеюсь, что помогло...

Ответ 2

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