引言
在安卓端通过蓝牙发送指令到PC端,java程序接收指令,并执行相应的动作。其中指令格式有所规范,PC端的java程序通过robot库进行操作
代码
控制类remotePC.java
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
public class remotePC {
//保存当前鼠标指针的坐标(px,py)
private static int px;
private static int py;
//最大延迟时间:1秒
public static final int MAX_DELAY = 1000;
//最小间隔时间:1毫秒
public static final int SAMPLE_TIME_DIV = 1;
//魔法数字,用于设置默认的事件delay时间间隔
private final double magicX = 1.0;
//视觉延迟:默认100ms
private final int VISIBAL_MOVEMENT = 100;
//PC屏幕尺寸
private int screenWidth;
private int screenHeight;
//手机屏幕尺寸
private int mobileWidth;
private int mobileHeight;
//手机电脑尺寸转换的比例
private double widScale;
private double heiScale;
//用于控制的robot类
private Robot robot;
//默认构造函数
public remotePC() throws AWTException{
this(1366, 768);
}
//构造函数,指定手机屏幕尺寸
public remotePC(int mobileWidth, int mobileHeight) throws AWTException{
robot = new Robot();
robot.setAutoDelay((int)magicX);
setScreenSize();
this.mobileHeight = mobileHeight;
this.mobileWidth = mobileWidth;
setScale();
}
public void moveToCenter(){
this.move(screenWidth/2, screenHeight/2, 1);
}
//[鼠标光标移动]
//dt:间隔时间,时间长短对应速度
//dx,dy:手机上移动的相对横纵位移,自动转换为pc上应该移动的尺寸
public void move(int dx, int dy, int dt){
double deltaX = (1.0*dx/widScale);
double deltaY = (1.0*dy/heiScale);
int dxpms = (int)deltaX/dt;
int dypms = (int)deltaY/dt;
for(int i=0; i<dt; i++){
px += dxpms;
py += dypms;
if(px <= 0){
px = 0;
}else if(px >= screenWidth){
px = screenWidth;
}
if(py <= 0){
py = 0;
}else if(py >= screenHeight){
py = screenHeight;
}
robot.mouseMove((int)px, (int)py);
}
}
//[按下鼠标左键]
public void pressMouseL(){
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
}
//[释放鼠标左键]
public void releaseMouseL(){
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
}
//[点击一下鼠标左键]
public void clickMouseL(){
this.pressMouseL();
this.releaseMouseL();
}
//[按下鼠标右键]
public void pressMouseR(){
robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
}
//[释放鼠标右键]
public void releaseMouseR(){
robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
}
//[点击鼠标右键]
public void clickMouseR(){
this.pressMouseR();
this.releaseMouseR();
}
//[按下滚轮]
public void pressWheel(){
robot.mousePress(InputEvent.BUTTON2_DOWN_MASK);
}
//[释放滚轮]
public void releaseWheel(){
robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK);
}
//[滚轮往下移动]:step是移动步数,相对于滚轮的一格
public void wheelDown(