如何通过 Android 套接字获取输入的字符到 java 服务器
How to obtain typed character to java server through Android socket
我正在 android 上创建 Remote PC 应用程序。我已经编写了一个代码来获取按下的键的 keyunicode,如下所示
AndroiClient.java
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction()==KeyEvent.ACTION_DOWN){
int keyUniCode=event.getUnicodeChar(event.getMetaState());
if(keyUniCode!=0){
char charCode=(char) keyUniCode;
Log.i("Code:",""+keyUniCode);
SendMessage msg=new SendMessage(charCode);
msg.execute();
}
}
return super.dispatchKeyEvent(event);
}
java 服务器使用 PrintWriter
对象接收 iti。
JavaServer.java
public class KeyListener {
private Robot robot;
private static Socket client;
private static ServerSocket server;
private static InputStreamReader inputStreamReader;
private static BufferedReader bufferedReader;
private static String message;
private static KeyListener keyboard;
public static void main(String... args) throws Exception {
keyboard = new KeyListener();
server=new ServerSocket(6666);
System.out.println("Waiting");
while(true){
client=server.accept();
System.out.println("Accepted");
inputStreamReader=new InputStreamReader(client.getInputStream());
bufferedReader=new BufferedReader(inputStreamReader);
message=bufferedReader.readLine();
System.out.println(message);
keyboard.type(message);
}
}
public KeyListener() throws AWTException {
this.robot = new Robot();
}
public KeyListener(Robot robot) {
this.robot = robot;
}
public void type(CharSequence characters) {
int length = characters.length();
for (int i = 0; i < length; i++) {
char character = characters.charAt(i);
type(character);
}
}
class MyException extends IllegalArgumentException{
public MyException(String message) {
super(message);
}
}
public void type(char character) {
switch (character) {
case 'a': doType(VK_A); break;
case 'b': doType(VK_B); break;
case 'c': doType(VK_C); break;
case 'd': doType(VK_D); break;
case 'e': doType(VK_E); break;
.
.
.
.//other cases
.
.
.
case '\n': doType(VK_ENTER); break;
.
.
.
.//other cases
.
default:
throw new MyException("Cannot type character " + character);
}
}
private void doType(int... keyCodes) {
doType(keyCodes, 0, keyCodes.length);
}
private void doType(int[] keyCodes, int offset, int length) {
if (length == 0) {
return;
}
robot.keyPress(keyCodes[offset]);
doType(keyCodes, offset + 1, length - 1);
robot.keyRelease(keyCodes[offset]);
}
}
现在面临的问题是 Enter 和 Backspace 键在 android 中不生成任何 Unicode。那么我怎样才能获得 java
的 Enter 和 BacSpace 按键
这些方面的内容应该有所帮助
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction()==KeyEvent.ACTION_DOWN){
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
SendMessage msg = new SendMessage(some identifier for enter);
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
SendMessage msg = new SendMessage(some identifier for delete);
} else {
int keyUniCode=event.getUnicodeChar(event.getMetaState());
if(keyUniCode!=0){
char charCode=(char) keyUniCode;
Log.i("Code:",""+keyUniCode);
SendMessage msg=new SendMessage(charCode);
msg.execute();
}
}
}
return super.dispatchKeyEvent(event);
}
我正在 android 上创建 Remote PC 应用程序。我已经编写了一个代码来获取按下的键的 keyunicode,如下所示
AndroiClient.java
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction()==KeyEvent.ACTION_DOWN){
int keyUniCode=event.getUnicodeChar(event.getMetaState());
if(keyUniCode!=0){
char charCode=(char) keyUniCode;
Log.i("Code:",""+keyUniCode);
SendMessage msg=new SendMessage(charCode);
msg.execute();
}
}
return super.dispatchKeyEvent(event);
}
java 服务器使用 PrintWriter
对象接收 iti。
JavaServer.java
public class KeyListener {
private Robot robot;
private static Socket client;
private static ServerSocket server;
private static InputStreamReader inputStreamReader;
private static BufferedReader bufferedReader;
private static String message;
private static KeyListener keyboard;
public static void main(String... args) throws Exception {
keyboard = new KeyListener();
server=new ServerSocket(6666);
System.out.println("Waiting");
while(true){
client=server.accept();
System.out.println("Accepted");
inputStreamReader=new InputStreamReader(client.getInputStream());
bufferedReader=new BufferedReader(inputStreamReader);
message=bufferedReader.readLine();
System.out.println(message);
keyboard.type(message);
}
}
public KeyListener() throws AWTException {
this.robot = new Robot();
}
public KeyListener(Robot robot) {
this.robot = robot;
}
public void type(CharSequence characters) {
int length = characters.length();
for (int i = 0; i < length; i++) {
char character = characters.charAt(i);
type(character);
}
}
class MyException extends IllegalArgumentException{
public MyException(String message) {
super(message);
}
}
public void type(char character) {
switch (character) {
case 'a': doType(VK_A); break;
case 'b': doType(VK_B); break;
case 'c': doType(VK_C); break;
case 'd': doType(VK_D); break;
case 'e': doType(VK_E); break;
.
.
.
.//other cases
.
.
.
case '\n': doType(VK_ENTER); break;
.
.
.
.//other cases
.
default:
throw new MyException("Cannot type character " + character);
}
}
private void doType(int... keyCodes) {
doType(keyCodes, 0, keyCodes.length);
}
private void doType(int[] keyCodes, int offset, int length) {
if (length == 0) {
return;
}
robot.keyPress(keyCodes[offset]);
doType(keyCodes, offset + 1, length - 1);
robot.keyRelease(keyCodes[offset]);
}
}
现在面临的问题是 Enter 和 Backspace 键在 android 中不生成任何 Unicode。那么我怎样才能获得 java
的 Enter 和 BacSpace 按键这些方面的内容应该有所帮助
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction()==KeyEvent.ACTION_DOWN){
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
SendMessage msg = new SendMessage(some identifier for enter);
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
SendMessage msg = new SendMessage(some identifier for delete);
} else {
int keyUniCode=event.getUnicodeChar(event.getMetaState());
if(keyUniCode!=0){
char charCode=(char) keyUniCode;
Log.i("Code:",""+keyUniCode);
SendMessage msg=new SendMessage(charCode);
msg.execute();
}
}
}
return super.dispatchKeyEvent(event);
}