[英]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.