我正在开发一个远程键盘应用程序,它可以从Android设备控制计算机的键盘。
但问题是,当我想传递android按键密钥代码以在java的Robot类中使用时,字母和数字的效果很好,但是退格和移位键例如不能正常工作。当我从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);
}
}
}
谢谢。
答案 0 :(得分:0)
尝试使用getKeyCode
而不是getUnicodeChar
,因为第二个获取由指定的密钥和元键状态组合生成的Unicode 字符。 Shift是一个元键,它不会生成任何字符代码本身。
另一方面,getKeyCode
方法检索键事件的键代码。
当然,您需要修改接收部分代码,将这些代码视为键而不是字符。
答案 1 :(得分:0)
最佳解决方案是发送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;
....