当前位置: 代码迷 >> 软件设计 >> Android手机监控软件设计兑现[源码][附图]
  详细解决方案

Android手机监控软件设计兑现[源码][附图]

热度:5978   发布时间:2013-02-26 00:00:00.0
Android手机监控软件设计实现[源码][附图]

一、需求分析:

随着IT信息技术的飞速发展,手机的普及,伴随着智能手机的出现及快速的更新换代,手机已不仅仅是一个通信工具,更是一个多功能的应用平台。

手机监控软件则是基于电脑监控软件的原理,植入手机平台的一款软件,由于手机具有良好的网络支持及出色的便携性,植入手机平台十分有现实意义。

二、概要设计:

服务器端:

1.????????? 启动服务器,接收socket

2.????????? 截取屏幕图像,压缩并编码发送

客户端:

1.????????? 登陆服务器及验证

2.????????? 接收服务器信息并解码显示

?

??? 各个功能通过各自的类来完成。

三、详细设计:

1、手机客户端用ImageView来显示监控画面。

2、手机端使用线程完成接收信息、译码等费时操作。

3、完成Activity之间的数据传递。

4、使用流布局、相对布局等布局方式

5、使用布局与程序功能代码分离的设计方法

6、使用横向、全屏

四、程序结构

1、程序结构说明:

本程序采用模块化设计方法,各个功能的实现都有具体的方法,在主函数调用相应的方法即可实现程序的要求。程序的整体性很强。

2、重要数据说明:

程序通信中,使用字节流协议进行通信。

四个字节

一个字节

N个字节

一个INT,代表信息长度

代表类型

信息

其中,类型:0代表图片类型数据 (针对客户端)

0代表移动命令???? (针对服务器)

??????????? 1代表鼠标点击命令 2代表鼠标释放命令

??????????? 3代表键盘点击命令 4代表键盘释放命令

?

3、函数清单:

??? 见代码

五、调试分析:

程序截图:



?

使用预览



?

欢迎界面



?

使用界面

六、源代码:

1.服务器端(电脑)

package cn.netjava7;public class CharRoom {	/**	 * 写一个服务器打开的程序	 * @param port:端口	 */	public void startServer (int port){	   				try{			//建立一个Serverc 对象		   java.net.ServerSocket sc=new java.net.ServerSocket(port);		    System.out.println("服务器创建成功");		   //开始不断地接收数据		   while (true){			   //建立一个联结对象			 java.net.Socket client=sc.accept();			 UserThread ust=new UserThread(client);			 ust.init();             ust.start();		   }		   		}catch(Exception ef){			ef.printStackTrace();		}			 	}				/**	 * 主函数	 */	public static void main(String args[]){	    CharRoom cr=new CharRoom();	    cr.startServer(9090);	}	}

?

package cn.netjava7;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.JFrame;public class UserThread extends Thread{	//定义构造器,传入对client	private java.net.Socket client;	private java.io.InputStream ins;	private java.io.OutputStream ous;	public UserThread(java.net.Socket client){		this.client=client;	}	//初始化	public void init(){		try {			ins=client.getInputStream();			ous=client.getOutputStream();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}			}	//写run方法	public void run(){		try {			sendImg();		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}		public void sendImg() throws Exception{		DataOutputStream dous=new DataOutputStream(ous);		Robot ro=new Robot();		Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize(); 		Rectangle r=new Rectangle(scrSize.width,scrSize.height);		System.out.println("大小是:"+scrSize.height+" "+scrSize.width);		while(true){		BufferedImage bui=ro.createScreenCapture(r);		ByteArrayOutputStream imageStream=new ByteArrayOutputStream();	    boolean resultWrite = ImageIO.write(bui, "jpg", imageStream);		byte [] tagInfo=imageStream.toByteArray();		System.out.println(tagInfo.length);		System.out.println(tagInfo[0]+" "+tagInfo[1]);Image img=Toolkit.getDefaultToolkit().createImage(tagInfo, 0,tagInfo.length);		dous.writeInt(tagInfo.length+5);		dous.writeByte((byte)4);		dous.write(tagInfo);		Thread.sleep(1000);		}								            					}	}

?2.手机端:

package cn.netjava;import java.io.DataInputStream;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.wifi.WifiManager;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.TextView;public class FunctionViewActivity extends Activity{	 	//定义各个stream	private java.io.InputStream ins;	private java.io.OutputStream ous;	private java.io.DataInputStream dins;		//定义各个组件	private ImageView img;	private TextView tvw;		//定义一个Bitmap 用来存ImageView的每个图	private Bitmap bmm;	//放接收到数据的数组    private byte[] data;		//初始化	public void init(String ip){		try{			System.out.println(ip);	    	java.net.Socket soc=new java.net.Socket(ip,9090);	    	ins=soc.getInputStream();	    	dins=new DataInputStream(ins);	    	ous=soc.getOutputStream();	    	System.out.println("创建成功!");		}catch(Exception ef){			ef.printStackTrace();		}			}	//内部类,myHandler	class MyHandler extends Handler{		public MyHandler(){		  		}		public MyHandler(Looper looper){			super(looper);		}	   public void handleMessage(Message msg){		   		   img.setImageBitmap((Bitmap)msg.obj);		   	}	}	//onCreate	public void onCreate(Bundle savedInstanceState) {	        super.onCreate(savedInstanceState);	        setContentView(R.layout.mainfunctionactivity);	        //得到各个组件	        img=(ImageView)findViewById(R.id.imgView);	        tvw=(TextView)findViewById(R.id.exitTextView);	        	        //textView 添加监听器	        tvw.setOnClickListener(new OnClickListener(){ 				public void onClick(View v) {				    System.exit(0);				}		        });	        	        init(this.getIntent().getStringExtra("ipaddress"));	        	        Looper looper = Looper.myLooper();    	             //此处甚至可以不需要设置Looper,因为 Handler默认就使用当前线程的Looper   	        final MyHandler  myhandler= new MyHandler(looper);   	        new Thread() {   	                 public void run() {   	           		   while(true){	           		   try{	           		   data=new byte[dins.readInt()-5];	           		   dins.readByte();	           		   //注意,这里要用readfully	           		   dins.readFully(data);	           		   //注意,这里要回收bmm ,否则报错	           		   if (bmm!=null){	           			   bmm.recycle();	           		   }	           		   bmm=BitmapFactory.decodeByteArray(data, 0, data.length);	           		   System.out.println("decode after:"+System.currentTimeMillis());	           		   //每一百ms 执行 (可调)	           		//	Thread.sleep(100);	           			//创建一个Message对象,并把得到的天气信息赋值给Message对象   	                    Message message = Message.obtain();   	                    message.obj = (Bitmap)bmm; 	                    myhandler.sendMessage(message);  	           		} catch (Exception e) {	           			// TODO Auto-generated catch block	           			e.printStackTrace();	           		}	                     	           	   }	        	  }   	         	            }.start();  	 }	}

?

?

?

1 楼 qq275924561 2012-10-13  
你好 可以看看这个项目的安卓的项目文件吗?
求交流~
QQ:275924561 h或者发我QQ邮箱也可以!275924561@qq.com
  相关解决方案