KeyEvent特殊键(如静音)

时间:2011-06-04 10:53:31

标签: java android keyevent media-keys

我目前正在尝试为Android创建一个小型远程应用程序来控制我的PC上的MediaPlayer(如Rythmbox)。

大多数媒体播放器都了解键盘上的特殊键(例如“播放/暂停”或“下一个/上一个”)。我的想法是Android应用程序向PC发送命令(如“暂停”)。在PC上运行一个普通的Java应用程序,它接收这些命令并模拟按下这个特殊按钮的按键。

优势在于您可以在所有平台上为每个支持此特殊键的播放器使用此应用程序(并且它们几乎在每个新的USB键盘上)。

我在KeyEvent - 类中搜索了JavaDocs中的常量,但我找不到任何常量。有没有人知道如何模拟按下其中一个按钮,如果甚至可以使用Java?

只要没有其他解决方案,其他库也可以和我一起使用。

另外,我知道我应该使用Robot来模拟按键,这适用于键盘上的所有普通按键。我根本无法找到任何方法来模拟这些特殊键上的按键。

3 个答案:

答案 0 :(得分: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中实现。但目前,似乎没有解决方案。

感谢所有答案。

答案 1 :(得分:1)

您是否已尝试将操作系统相关密钥代码发送至Robot?遗憾的是,多媒体密钥在Java中并不直接支持,甚至在Java 1.7中也没有,但java.awt.event.KeyCode中的大多数密钥代码定义与它们的本机Windows垂饰具有相同的值。机器人不直接在Java中过滤未知的密钥代码,但让其原生后端决定如何处理它们。所以它有可能至少在某些平台上起作用。

MUTE键代码为0xAD。以下是Windows Key Codes

的列表

答案 2 :(得分:-1)

VK_MEDIA_PLAY_PAUSE
VK_VOLUME_MUTE
VK_VOLUME_DOWN
VK_MEDIA_NEXT_TRACK
VK_MEDIA_PREV_TRACK

Control a Windows apps using Java

暂时解决你的问题只需google“rhythmbox android remote”。已经有一些很棒的项目了。