安卓开发,手机控制鼠标控制安卓手机怎么做,求详细

用你的手机控制你的电脑Premotedroid-android100学习网
用你的手机控制你的电脑Premotedroid
最近在看android的开源项目,发现一个比较有趣的程序premotedroid,它可以用手机控制你的电脑,在这里和大家分享。 Premotedroid可以通过Bluetooth 或者 Wifi ...
最近在看android的开源项目,发现一个比较有趣的程序premotedroid,它可以用手机控制你的电脑,在这里和大家分享。
Premotedroid可以通过Bluetooth 或者 Wifi 连接你的电脑,进行鼠标和键盘的模拟,和文件管理,以及截图。
因为本人是个穷屌丝,用的是台式机。所以蓝牙连接部分没有测试过。不过原理是一样的,只是建立的连接方式不同。其实Premotedroid的原理非常简单。就是在电脑和手机建立一个socket连接。然后手机和电脑之间发送不同的命令。然后手机和电脑做出不同的响应,返回响应的数据。
服务端socket部分核心代码如下:
服务端监听socket的类为PRemoteDroidServerTcp。在PRemoteDroidServerTcp的构造函数中监听代码如下:
this.serverSocket = new ServerSocket(port);
(new Thread(this)).start();
当服务端有请求时,会新建一个PRemoteDroidConnectionTcp然后把PRemoteDroidConnectionTcp作为参数,构造一个PRemoteDroidServerConnection和客户端进行通信。PRemoteDroidServerConnection通过PRemoteDroidConnectionTcp的sendAction和receiveAction方法给客户端发送命令和接收命令。
而客户端和服务端建立socket的核心代码如下:
[代码]java代码:
  Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port), 1000);
PRemoteDroidConnectionTcp connection = new PRemoteDroidConnectionTcp(socket);
客户端通过PRemoteDroidConnectionTcp的sendAction和receiveAction方法给服务端发送命令和接收命令。
当服务端和客户端建立好socket连接后,他们之间可以互相发送命令和接收命令。
所有的命令都继承自PRemoteDroidAction。现在支持的命令如下:
AuthentificationAction:认证命令。客户端向服务端发送认证的密码。
AuthentificationResponseAction:认证响应命令。服务端验证客户端是否正确的,返回验证的结果。
FileExploreRequestAction:打开文件命令。客户端请求打开服务端文件的命令。客户端发送这个命令请求打开服务端的文件。
FileExploreResponseAction:服务端响应客户端打开文件的命令。假如客户端请求打开的文件是一个文件夹。则返回这个文件夹所有文件列表,假如客户端请求打开的文件,是一个可以执行的文件。服务端则会打开这个文件。
KeyboardAction:键盘命令。
MouseClickAction:鼠标点击命令。
MouseMoveAction:鼠标移动命令。
MouseWheelAction:鼠标滚轮命令。
ScreenCaptureRequestAction:截屏命令。
ScreenCaptureResponseAction:截屏响应命令。
在基类PRemoteDroidAction用一个byte定义了各种命令的命令号:
[代码]java代码:
  public static final byte MOUSE_MOVE = 0;
   public static final byte MOUSE_CLICK = 1;
   public static final byte MOUSE_WHEEL = 2;
   public static final byte KEYBOARD = 3;
   public static final byte AUTHENTIFICATION = 4;
   public static final byte AUTHENTIFICATION_RESPONSE = 5;
   public static final byte SCREEN_CAPTURE_REQUEST = 6;
   public static final byte SCREEN_CAPTURE_RESPONSE = 7;
   public static final byte FILE_EXPLORE_REQUEST = 8;
   public static final byte FILE_EXPLORE_RESPONSE = 9;
客户端和服务端接收命令时:都是先接收命令号,然后根据不同的命令号。构造出不同的命令。
[代码]java代码:
  public static PRemoteDroidAction parse(DataInputStream dis) throws IOException
byte type = dis.readByte();
switch (type)
case MOUSE_MOVE:
return MouseMoveAction.parse(dis);
case MOUSE_CLICK:
return MouseClickAction.parse(dis);
case MOUSE_WHEEL:
return MouseWheelAction.parse(dis);
case KEYBOARD:
return KeyboardAction.parse(dis);
case AUTHENTIFICATION:
return AuthentificationAction.parse(dis);
case AUTHENTIFICATION_RESPONSE:
return AuthentificationResponseAction.parse(dis);
case SCREEN_CAPTURE_REQUEST:
return ScreenCaptureRequestAction.parse(dis);
case SCREEN_CAPTURE_RESPONSE:
return ScreenCaptureResponseAction.parse(dis);
case FILE_EXPLORE_REQUEST:
return FileExploreRequestAction.parse(dis);
case FILE_EXPLORE_RESPONSE:
return FileExploreResponseAction.parse(dis);
throw new ProtocolException();
而服务和客户端发送命令的时候,都是先发送命令号,然后再发送命令数据。
PRemoteDroidAction中定义了抽象方法:
public abstract void toDataOutputStream(DataOutputStream dos) throws IOE
所有命令都需要实现这个方法。
要运行Premotedroid,需要在电脑端先运行PRemoteDroid Server。服务端运行后会在桌面右下角显示以下图标,那说明服务端已经运行起来了。
然后在手机运行PRemoteDroid Client。运行后进入的第一个界面如下:
是不是非常熟悉呢,没错,这就是一个鼠标。对应上图就是左键,中间滑轮,和右键。
在用手机控制你的电脑之前,还需要先做一些设置。
打开菜单,选择connecionts.进入连接界面,增加一个wifi连接。
设置好名字,服务端密码,默认为azerty。服务端ip,和端口,然后保存。再次进入启动的鼠标界面。就可以用手机控制你的电脑了。
连接设置好后,客户端和服务器建立好socket。客户端会向服务端发送一个认证的命令。
[代码]java代码:
  AuthentificationResponseAction:
  public void toDataOutputStream(DataOutputStream dos) throws IOException
dos.writeByte(AUTHENTIFICATION);
dos.writeUTF(this.password);
  把密码发送到服务端。服务端得到密码后,比较和服务端密码是否相同,返回结果。
  AuthentificationResponseAction:
  public void toDataOutputStream(DataOutputStream dos) throws IOException
dos.writeByte(AUTHENTIFICATION_RESPONSE);
dos.writeBoolean(this.authentificated);
鼠标界面中,除了三个黑色按键之外的黑色区域,是一个ControlView。当你的手在ControlView里移动时,会触发onTouchMoveMouseMove事件,从而计算出鼠标移动的距离,
moveXFinal和moveYFinal,然后发送到服务端。
[代码]java代码:
  MouseMoveAction
  public void toDataOutputStream(DataOutputStream dos) throws IOException
dos.writeByte(MOUSE_MOVE);
dos.writeShort(this.moveX);
dos.writeShort(this.moveY);
  当服务端接收到moveMouse时,会触发服务端的moveMouse方法:
private void moveMouse(MouseMoveAction action)
PointerInfo pointerInfo = MouseInfo.getPointerInfo();
if (pointerInfo != null)
Point mouseLocation = pointerInfo.getLocation();
if (mouseLocation != null)
int x = mouseLocation.x + action.moveX;
int y = mouseLocation.y + action.moveY;
this.application.getRobot().mouseMove(x, y);
然后通过服务端的Robot类,向系统发送鼠标移动事件。就可以发现通过Premotedroid来移动你的鼠标了。
MouseClickAction,MouseWheelAction,KeyboardAction这几个命令都比较相似,都是通过客户端发送特点的命令到服务端,服务端把事件通过Robot类,向系统发送事件。实现客户端控制电脑的鼠标点击,鼠标滚轮,和键盘事件。
选择file explorer菜单进入浏览文件FileExplorerActivity。
进入FileExplorerActivity后,客户端会向服务端发送一个请求打开根目录了命令:
[代码]java代码:
  FileExploreRequestAction,this.sendFileExploreRequest("");
  public void toDataOutputStream(DataOutputStream dos) throws IOException
dos.writeByte(FILE_EXPLORE_REQUEST);
dos.writeUTF(this.directory);
dos.writeUTF(this.file);
从而得到你电脑里所有盘符的目录结构,如下图:
[代码]java代码:
  服务返回文件列表的响应命令是:
  FileExploreResponseAction:
  public void toDataOutputStream(DataOutputStream dos) throws IOException
dos.writeByte(FILE_EXPLORE_RESPONSE);
dos.writeUTF(this.directory);
dos.writeInt(this.files.length);
for (String s : this.files)
dos.writeUTF(s);
  当客户端点击的文件不是一个目录,而是一个文件时。服务端会打开这个文件。
  Premotedroid还可以对电脑屏幕进行截屏,只要客户端向服务端发送截屏命令:
  ScreenCaptureRequestAction:
   public void toDataOutputStream(DataOutputStream dos) throws IOException
dos.writeByte(SCREEN_CAPTURE_REQUEST);
dos.writeShort(this.width);
dos.writeShort(this.height);
dos.writeByte(this.format);
  服务端进行截屏,再把截屏数据返回给客户端:
  private void screenCapture(ScreenCaptureRequestAction action)
Point mouseLocation = MouseInfo.getPointerInfo().getLocation();
Rectangle r = new Rectangle(mouseLocation.x - (action.width / 2), mouseLocation.y - (action.height / 2), action.width, action.height);
BufferedImage capture = this.application.getRobot().createScreenCapture(r);
String format =
if (action.format == ScreenCaptureRequestAction.FORMAT_PNG)
format = "png";
else if (action.format == ScreenCaptureRequestAction.FORMAT_JPG)
format = "jpg";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(capture, format, baos);
byte[] data = baos.toByteArray();
this.sendAction(new ScreenCaptureResponseAction(data));
catch (IOException e)
e.printStackTrace();
客户端收到截屏数据后。通过ControlView一个继承了ImageView的自定义控件展示出来。
Premotedroid介绍完毕。欢迎大家来交流。
已同步至 feathersong的微博安卓手机变鼠标图文教程
时间: 8:16:16来源:作者:xy(5)
手机变身鼠标,对于智能手机控们来说并不是新鲜,在老塞班时代就有类似的软件了。但很多此类软件都存在着使用不方便的问题,存在着设置IP地址等繁琐问题,今天为大家介绍一款软件《WiFi无线鼠标(WiFi Mouse HD)》,让你的安卓手机轻松变身鼠标。不要觉的这个功能没什么用处。当冬天你窝在被窝里欣赏电脑上的影片,但又没有无线鼠标,这时候就可以拿起你的智能手机来充当鼠标,轻松控制电脑,不想看了直接关机睡觉;如果你是一位老师上课时演示PPT,有了这个功能就不用站在电脑旁,可以在教室里四处走动,加强与学生的互动,还能随时切换PPT。需要的设备:一款版本2.1以上的Android设备;一台电脑;wifi环境。第一步:下载安装 WiFi Mouse HD 这款软件到你的Android设备。软件名称:v1.0
软件大小:
1.8M 下载地址: 第二步:下载安装 WiFi Mouse HD 的电脑客户端,客户端兼容XP / Windows Vista/ Windows 7/ Mac OSX,安装完成后无需对电脑客户端进行任何的设置。下载地址:&第三步:完成上面两步后,运行电脑客户端,打开你手机的wifi,确保你的手机和电脑在同一wifi网络下。打开“WiFi Mouse HD”点击“Auto Connect”或者输入PC/MAC的IP地址后点击“Connect”等待您的Android设备与电脑连接连接成功后画面,左下角对应的鼠标左键;中间对应鼠标滚轮;右下角对应鼠标右键利用手机的多点触摸,可以通过双指对电脑程序窗口进行缩放操作点击软件界面右上角“键盘”图标,手机会出现键盘,这时就可以实现远程文字输入点击软件界面左上角齿轮图标进入“设置”,可以设置指针的灵敏度和使用习惯等功能建议家庭用户使用,在公司等复杂网络环境下可能会出现无法连接的现象。手势:*点选单击*两个手指点击鼠标右键*两个手指滚动*双指开合放大*三个手指拖动或亮点四指轻扫显示桌面四指轻扫到当前窗口最大化四指轻扫横盘整理,改变当前窗口的焦点*左手鼠标支持(交换左,右鼠标​​点击)

我要回帖

更多关于 鼠标悬停显示详细信息 的文章

 

随机推荐