KeyEvent специальные ключи (например, отключение звука) - PullRequest
4 голосов
/ 04 июня 2011

В настоящее время я пытаюсь создать небольшое приложение для Android для управления MediaPlayer (например, Rythmbox) на моем ПК.

Большинство медиаплееров понимают специальные клавиши на моей клавиатуре (например, «воспроизведение / пауза» или «следующий / предыдущий»). Моя идея заключается в том, что приложение для Android отправляет команду (например, «пауза») на ПК. На ПК запускается обычное Java-приложение, которое получает эти команды и имитирует нажатие этой специальной кнопки.

Преимущество состоит в том, что вы можете использовать это приложение на всех платформах для каждого игрока, который поддерживает эти специальные клавиши (и они есть почти на каждой новой USB-клавиатуре).

Я искал в JavaDocs константу в KeyEvent -классе, но не могу ее найти. Кто-нибудь знает, как имитировать нажатие одной из этих кнопок и возможно ли это даже с Java?

С дополнительной библиотекой тоже все в порядке, если нет другого решения.

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

Ответы [ 3 ]

3 голосов
/ 12 июня 2011

Итак, я думаю, что это невозможно сделать с чистой Java. Я попытался еще кое-что выяснить, какой код клавиши есть у специальных клавиш, но эта небольшая программа возвращает только 0 для этих клавиш (она работает для "обычных" клавиш):

public class GetKeycode implements KeyListener{

    private JFrame f;
    private JLabel feld;

    public GetKeycode(){
        f = new JFrame("GetKeycode");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.addKeyListener(this);
        feld = new JLabel();
        f.add(feld);
        f.pack();
        f.setVisible(true);
    }

    @Override
    public void keyReleased(KeyEvent e) {
        feld.setText(e.getKeyCode()+"");        
    }

    public static void main(String[] args) {
        new GetKeycode();
    }

    // Unused:
    @Override public void keyPressed(KeyEvent e) {}
    @Override public void keyTyped(KeyEvent arg0) {}

}

Я надеюсь, что это будет реализовано в будущих версиях JRE. Но на данный момент, похоже, нет решения для этого.

Спасибо за все ответы в любом случае.

1 голос
/ 04 июня 2011

Вы уже пытались отправить коды клавиш, зависящие от ОС, на Robot?К сожалению, мультимедийные ключи напрямую не поддерживаются в Java, даже в Java 1.7, но большинство определений кода ключа в java.awt.event.KeyCode имеют то же значение, что и их собственные подвески Windows.Робот не фильтрует неизвестные коды клавиш непосредственно в Java, но позволяет своему внутреннему бэкэнду решать, что с ними делать.Так что есть вероятность, что он может работать, по крайней мере, на некоторых платформах.

Код ключа MUTE будет 0xAD.Вот список кодов клавиш Windows .

0 голосов
/ 11 июня 2011
VK_MEDIA_PLAY_PAUSE
VK_VOLUME_MUTE
VK_VOLUME_DOWN
VK_MEDIA_NEXT_TRACK
VK_MEDIA_PREV_TRACK

Управление приложениями Windows с использованием Java

Чтобы временно решить вашу проблему, просто погуглите "rhythmbox android remote". Уже есть несколько отличных проектов.

...