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". Уже есть несколько отличных проектов.