android蓝牙控制PC端代码分享

这篇文章主要为大家分享了android蓝牙控制PC端的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

引言

在安卓端通过蓝牙发送指令到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= 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(int step){ for(int i=0; i= 'A'){ robot.keyPress((int)c); robot.keyRelease((int)c); } } //[敲一个空格] public void printSpace(){ robot.keyPress(KeyEvent.VK_SPACE); robot.keyRelease(KeyEvent.VK_SPACE); } //[放大]相当于ctrl+滚轮上移 public void zoomIn(int step){ robot.keyPress(KeyEvent.VK_CONTROL); for(int i=0; i

PC端通过蓝牙和安卓app交互:BluetoothServer.java

 /** * Created by luyudi on 2016/11/9. * Modified by Lannooo on 2016/12/4. */ // server import java.awt.*; import java.io.InputStream; import java.io.IOException; import javax.bluetooth.UUID; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; import javax.microedition.io.StreamConnectionNotifier; public class BlueToothServer implements Runnable { private remotePC Controller; // 下面的UUID必须和手机客户端的UUID相一致 private static UUID ECHO_SERVER_UUID= new UUID("aeb9f938a1a34947ace29ebd0c67adf1", false); // 流连接通知 用于创建流连接 private StreamConnectionNotifier myPCConnNotifier = null; // 流连接 private StreamConnection streamConn = null; // 接受数据字节流 // 接收x y 坐标 private byte[] acceptedByteArray = new byte[1024]; // 读取(输入)流 private InputStream inputStream = null; // 主线程 public static void main(String[] args) { new BlueToothServer(); } public BlueToothServer() { try { String url = "btspp://localhost:" + ECHO_SERVER_UUID.toString(); // 得到流连接通知 myPCConnNotifier = (StreamConnectionNotifier) Connector.open(url); Controller = new remotePC(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // 打开连接通道并读取流线程 new Thread(this).start(); } public static int getInt(byte[] bytes){ return (0xff & bytes[3])       | (0xff00 & (bytes[2] << 8))  | (0xff0000 & (bytes[1] << 16)) | (0xff000000 & (bytes[0] << 24)); } public static float getFloat(byte[] b){ return Float.intBitsToFloat(getInt(b)); } @Override public void run() { try { boolean isMouseLPressed = false; boolean isWheelPressed = false; boolean end = false; while (true) { // 持续保持着监听客户端的连接请求 // 获取流连接 streamConn = myPCConnNotifier.acceptAndOpen(); // 获取流通道 inputStream = streamConn.openInputStream(); // 循环读取字节流,判断code类型和x,y坐标 while (inputStream.read(acceptedByteArray) != -1) { String acceptString = new String(acceptedByteArray); int index; if((index = acceptString.indexOf("RemoteTouch")) != -1) { byte[] codeBytes = new byte[4]; byte[] dxBytes = new byte[6]; byte[] dyBytes = new byte[6]; System.arraycopy(acceptedByteArray, index + 11, codeBytes, 0, 4); System.arraycopy(acceptedByteArray, index + 15, dyBytes, 0, 6); System.arraycopy(acceptedByteArray, index + 21, dxBytes, 0, 6); int dy = Integer.parseInt(new String(dyBytes)); int dx = Integer.parseInt(new String(dxBytes)); int code = getInt(codeBytes); if (end) { inputStream.close(); if (streamConn != null) { streamConn.close(); System.out.println("Disconnected..."); } break; } switch (code) { case 1://按下鼠标左键 isMouseLPressed = true; Controller.pressMouseL(); System.out.println("Pressing mouse L"); break; case 2://释放鼠标左键 if (isMouseLPressed) { Controller.releaseMouseL(); System.out.println("Released mouse L"); isMouseLPressed=false; } break; case 3://点击鼠标左键 Controller.clickMouseL(); System.out.println("Clicked mouse L"); break; case 4://点击鼠标右键 Controller.clickMouseR(); System.out.println("Clicked mouse R"); break; case 5://按下滚轮 //           isWheelPressed = true; //           Controller.pressWheel(); //           System.out.println("Pressing wheel"); break; case 6://释放滚轮 //           if(isWheelPressed){ //             Controller.releaseWheel(); //             System.out.println("Released wheel"); //           } break; case 7://滚轮滚动 int step = Math.abs(dy) / 40; System.out.println("wheel"); if (dy > 0) { Controller.wheelDown(step); System.out.printf("Wheel Down:%d steps. dy=%d\n", step, dy); } else { Controller.wheelUp(step); System.out.printf("Wheel Up:%d steps. dy=%d\n", step, dy); } break; case 8://放大、缩小 double s = Math.sqrt((double) (dx * dx + dy * dy)); if (dx <0) { Controller.zoomOut((int) s / 20); System.out.printf("Zoom out %d steps. dx=%d,dy=%d\n", (int) s / 20, dx, dy); } else { Controller.zoomIn((int) s / 20); System.out.printf("Zoom in %d steps. dx=%d,dy=%d\n", (int) s / 20, dx, dy); } break; case 9://显示可切换apps Controller.listAppsWindow(); System.out.println("show Switch apps"); break; case 10://显示桌面 Controller.showDesktop(); System.out.println("show desktop"); break; case 11://app 右切 Controller.simpleRightSwitchApp(); System.out.println("switch app: right"); break; case 12://app 左切 Controller.simpleLeftSwitchApp(); System.out.println("switch app: left"); break; case 13://window 右切 Controller.rightSwitchWindow(); System.out.println("switch window right"); break; case 14://window 左切 Controller.leftSwitchWindow(); System.out.println("switch window left"); break; case 15://鼠标左键双击 Controller.clickMouseL(); Controller.delay(1); Controller.clickMouseL(); System.out.println("clicked double mouse L"); break; case 16://鼠标移动 Controller.move(dx, dy, 1); //System.out.printf("Move mouse:dx=%d,dy=%d\n", dx, dy); break; case 17://左分屏 Controller.windowLeft(); System.out.println("Window divide: left"); break; case 18://右分屏 Controller.windowRight(); System.out.println("Window divide: right"); break; case 19: //上一张ppt Controller.prevSlide(); System.out.println("previous slide"); break; case 20: Controller.nextSlide(); System.out.println("Next Slide"); break; case 32: // PPT设置为隐藏鼠标 Controller.hideMouse(); System.out.println("Hide"); break; case 33: // ppt激光笔 Controller.setLaser(); System.out.println("Laser"); break; case 34: // ppt笔 Controller.setDraw(); System.out.println("Draw"); break; case 35: // ppt 荧光笔 Controller.setMark(); System.out.println("Mark"); break; case 100://退出 end = true; System.out.println("Quit."); break; default://未识别 System.out.println("Unknown code"); break; } } // clear data acceptedByteArray = new byte[1024]; } } } catch (IOException e) { e.printStackTrace(); } } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是android蓝牙控制PC端代码分享的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动