簡體   English   中英

從android鍵碼到Java鍵碼

[英]From android keycodes to java keycodes

您好,我正在開發一個遠程鍵盤應用程序,該應用程序可以從android設備控制計算機的鍵盤。

但是問題是當我想傳遞android keypress鍵代碼以在Java機器人類中使用時,字母和數字效果很好,但是例如退格鍵和shift鍵卻無法正常工作。 當我從android按它時,它在我的計算機上顯示22。

這是我在android上的代碼

@Override
public boolean dispatchKeyEvent(KeyEvent event) 
{
    int keyaction = event.getAction();

    if(keyaction == KeyEvent.ACTION_DOWN)
    {
        int keyunicode = event.getUnicodeChar();
        char character = (char) keyunicode;

        PrintStream ps;
        try {
            ps = new PrintStream(socket.getOutputStream());
            ps.println(character);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    return super.dispatchKeyEvent(event);
}

這是計算機上的代碼

public class Keyboard extends Thread{
    InputStreamReader isr;
    BufferedReader br;
    Socket socket;
    Robot r;

    @Override
    public void run() {
        try {
            socket = SocketWrapper.getSocket();
            r = new Robot();
            new Thread(new Runnable(){
                @Override
                public void run() {
                    while(true)
                    {
                        if(socket != null)
                        {
                            try {
                                isr = new InputStreamReader(socket.getInputStream());
                                br = new BufferedReader(isr);
                                if(br.ready())
                                {
                                    char c = (char) br.read();
                                    System.out.print(c);


                                    r.keyPress(KeyEvent.getKeyCodeForChar(c));
                                    r.keyRelease(KeyEvent.getKeyCodeForChar(c));


                                }
                            } catch (IOException ex) {
                                Logger.getLogger(AndroidServer.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    } 
                }

            }).start();
        } catch (AWTException ex) {
            Logger.getLogger(Keyboard.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

謝謝。

嘗試使用getKeyCode代替getUnicodeChar因為第二個獲取由指定鍵和元鍵狀態組合生成的Unicode 字符 Shift是一個元鍵,它本身不會生成任何字符代碼。 另一方面, getKeyCode方法檢索鍵事件的代碼。

當然,您需要修改代碼的接收部分,以將這些代碼視為鍵而不是字符。

最好的解決方案是發送SHIFT,BACKSPACE和其他未定義event.getUnicodeChar()的鍵的虛擬鍵代碼。

    if(keyCode == KeyEvent.KEYCODE_SHIFT_LEFT || keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)
         keyunicode = 16; //this is the code for KeyEvent.VK_SHIFT;
    if(keyCode == KeyEvent.KEYCODE_DEL)
         keyunicode = 8;  //this is the code for KeyEvent.VK_BACK_SPACE;
    ....     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM