KeyEvent специальные ключи (например, отключение звука)

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

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

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

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

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

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

3 ответа

Решение

Итак, я думаю, что это невозможно сделать с чистой 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. Но на данный момент, похоже, нет решения для этого.

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

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

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

VK_MEDIA_PLAY_PAUSE
VK_VOLUME_MUTE
VK_VOLUME_DOWN
VK_MEDIA_NEXT_TRACK
VK_MEDIA_PREV_TRACK

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

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

Другие вопросы по тегам