Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyEvent特殊键(如静音)_Java_Android_Keyevent_Media Keys - Fatal编程技术网

Java KeyEvent特殊键(如静音)

Java KeyEvent特殊键(如静音),java,android,keyevent,media-keys,Java,Android,Keyevent,Media Keys,我目前正在尝试为Android创建一个小的远程应用程序来控制我电脑上的MediaPlayer(比如Rythmbox) 大多数媒体播放器都能理解我键盘上的特殊键(如“播放/暂停”或“下一个/上一个”)。我的想法是Android应用程序向PC发送一个命令(如“暂停”),PC上运行一个普通的Java应用程序,该应用程序接收这些命令并模拟按下这个特殊按钮 这样做的好处是,你可以在所有平台上为每一个支持这种特殊按键的玩家使用这个应用程序(几乎每一个新的USB键盘上都有) 我在JavaDocs中搜索了Key

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

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

这样做的好处是,你可以在所有平台上为每一个支持这种特殊按键的玩家使用这个应用程序(几乎每一个新的USB键盘上都有)

我在JavaDocs中搜索了
KeyEvent
-类中的一个常量,但没有找到任何常量。有人知道如何模拟按下其中一个按钮吗?如果Java也能做到这一点

附加库也可以,只要没有其他解决方案


此外,我知道我应该使用
机器人来模拟按键,这适用于我键盘上的所有普通按键。我简直找不到任何方法来模拟在这些特殊按键上按键。

您是否已经尝试将依赖操作系统的按键代码发送到
机器人
?不幸的是,Java尚未直接支持多媒体密钥,甚至Java 1.7也不支持多媒体密钥,但是
Java.awt.event.keycode
中的大多数keycode定义与它们的本机Windows挂件具有相同的值。Robot不直接在Java中过滤未知的密钥代码,而是让其本机后端决定如何处理它们。因此,它有可能至少在某些平台上起作用

静音键代码应为
0xAD
。这是一份清单


要暂时解决您的问题,只需谷歌“rhythmbox android remote”。已经有一些很棒的项目了。

因此,我认为纯Java不可能做到这一点。我尝试了其他方法来找出特殊键的键代码,但是这个小程序只返回这些键的
0
(它适用于“正常”键):

我希望这将在JRE的未来版本中实现。但目前,似乎没有解决办法


谢谢你的回答。

好主意,但在Linux下它什么也不做,Windows报告一个
IllegalArgumentException
,因为它是一个未知的密钥代码。在Windows下,它说:IllegalArgumentException:无效的密钥代码您使用了密钥代码吗。参考:我想模拟键盘上的按键,使电脑静音,而不是安卓设备。抱歉,时间太晚了。我不是在想linux。我将使用bash、ssh和rhythmbox-client.Java的
KeyCode
-类中不存在这些常量。此外,我不想只控制Rythmbox,但任何知道如何使用该键的玩家,无论他在哪个平台(Windows、Linux、OSX)上运行。我想模拟按下其中一个键,但使用其他应用程序不是一个选项。我记得以前尝试过这样做。我最终在应用程序的安装中加入了一个程序来训练要使用的代码,因为多媒体键在不同的系统中发生了变化。也许从那以后它就变了。
VK_MEDIA_PLAY_PAUSE
VK_VOLUME_MUTE
VK_VOLUME_DOWN
VK_MEDIA_NEXT_TRACK
VK_MEDIA_PREV_TRACK
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) {}

}