【问题标题】:KeyEvent special Keys (like mute)KeyEvent 特殊键(如静音)
【发布时间】:2011-09-08 08:12:33
【问题描述】:

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

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

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

我在 JavaDocs 中搜索了 KeyEvent-class 中的常量,但我找不到。有谁知道如何模拟按下这些按钮之一,如果这甚至可以用 Java 实现?

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

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

【问题讨论】:

标签: java android keyevent media-keys


【解决方案1】:

所以,我认为纯 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 的未来版本中实现。但目前,似乎没有解决办法。

无论如何感谢所有的答案。

【讨论】:

    【解决方案2】:

    您是否已经尝试将依赖于操作系统的密钥代码发送到Robot?不幸的是,Java 还没有直接支持多媒体键,甚至在 Java 1.7 中也不支持,但java.awt.event.KeyCode 中的大多数键码定义与它们的原生 Windows 挂件具有相同的值。 Robot 不会直接在 Java 中过滤未知的关键代码,而是让其本地后端决定如何处理它们。所以它有可能至少在某些平台上工作。

    静音键代码为0xAD。这是Windows Key Codes 的列表。

    【讨论】:

    • 好主意,但在 Linux 下它什么也不做,Windows 报告一个 IllegalArgumentException,因为它是一个未知的键码。
    • 在 windows 下显示:IllegalArgumentException: Invalid key code
    【解决方案3】:
    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”。已经有一些很棒的项目了。

    【讨论】:

    • 抱歉来晚了。我没想到Linux。我会使用 bash、ssh 和韵律箱客户端。
    • Java 的KeyCode-class 中不存在这些常量。此外,我不想只控制 Rythmbox,而是任何知道如何使用此键的玩家,无论他在哪个平台(Windows、Linux、OS X)上运行。我想模拟按下其中一个键,不能使用其他应用程序。
    • 我记得以前尝试过这样做。我最终在应用程序的安装中包含了一个程序来训练使用哪些代码,因为多媒体键从一个系统到另一个系统发生了变化。也许它已经改变了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多