1、基于android的智能手机远程监控软件 毕业设计说明书论文 基于Android的智能手机远程监控软件学院名称: 电气信息工程学院 专 业: 通信工程 班 级: 09通信2W 学 号: 09313218 姓 名: 指导教师姓名: 指导教师职称: 二一三 年 六 月基于Android的智能手机远程监控软件 The Design of remote monitoring software based on Android smartphones 绪 论Android是Google发布的一款基于Linux核心的手机操作系统,Android是一种开源的、免费的移动计算软件平台,目前基于Android智
2、能手机的用户数量众多。在智能手机操作系统中市场占有率最高。Android平台最大的优势就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。丰富的硬件,这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色, 却不会影响到数据同步、甚至软件的兼容。本课题是基于Android智能手机进行远程监控程序及其硬件监控终端开发的。移动性强 ,真正做到随时随地为用户提供服务。本说明书共分为4章,第一章课题分
3、析与方案论证;第二章对监控终端硬件进行了说明;第三章对详细的对应用软件进行了分析;第四章有针对性的列举了Android应用软件在调试过程中出现的问题,并对问题作出了分析。设计的最终成果是能通过Android智能手机显示远程终端传来的数据,并通过指令实现对远程终端的控制。 第1章 课题分析与方案论证1.1 课题任务分析 本课题主要实现用Android智能手机显示远程监控终端传来的数据,并通过指令实现对远程终端的控制。谷歌公司为了方便用户Android平台上开发软件,使用了使用人数最多的JAVA语言作为主要的开发语言,开发环境是IBM开发的开源软件Ecplise。在开发Android应用软件软件之
4、前,需要首先配置好开发环境,这其中包括Eclipse软件下载(免安装),JAVA虚拟机的安装,android开发包SDK的下载并作为插件添加到Eclipse中。运用实验室的CDMA终端模块,该模块通过GPRS网络发送数据给具有良好移动性的Android手机,Android手机将接收到的数据处理后显示出来,通过GPRS网络发送指令给终端模块从而控制终端模块。本设计研究并实现了通过无线设备获取远程终端监测信息。研究内容主要包括Android的系统架构、应用开发环境建立、智能手机远程监控应用软件开发、远程监控网关软硬件设计。模块软件功能上包括:用户根据需要进行数据检测、接口选择与配置;设备地址配置。
5、基于应用的Android远程监控管理软件用于监控远程基站的温湿度环境。实现对远程基站检测节点终端的温度、湿度等状态参数的收集与管理。软件运行环境是Android2.2操作系统及其以上版本。具有掉电后台数据保护功能,适当修改可被广泛用于监测和管理远程数据终端。1.2 方案论证 尽管没有在课堂上系统的学习过JAVA语言及Android软件开发技能,但是由于JAVA语言设计的比C+简洁的很多,在有C语言的基础上自学JAVA语言,难度不是很大,谷歌为了推广Android,不但推出了便于使用的SDK开发包,还编写了大量帮助文档,同时也给出了一定数量的使用示例源代码,结合实验室的CDMA终端模块,通过价格
6、合适的GPRS网络传送数据。本次方案论证主要对数据传送方式的选择。方案一:1. Android手机收发数据方案选用通用的短信方式收发数据,根据特定的数据协议,从接收到的短信中提取数据,经过处理去掉数据中的控制部分,将相关的监测数据提取出来,在应用程序界面上给予显示,同时通过短信的方式,按照数据传输协议,以规定的方式传送控制指令到CDMA控制终端。2. CDMA监控终端收发数据方案通过的短信方式收发数据,间歇性质的采集周围环境的温湿度数据,根据数据传输协议,将采集到的数据按照特定的格式,通过短信的方式传输数据给Android智能手机。同时根据特定的数据协议,从接收到的短信中提取数据,经过处理去掉
7、数据中的控制部分,得到Android智能手机发送的控制指令,根据指令的内容做出相关的反应。方案二:1. Android手机收发数据方案选用网络的方式收发数据,购买一个固定的IP地址,在某个可以联入网络的设备上开发一款服务器软件(比如PC),该服务器软件具有的功能是储存相关设备的IP地址,并且相关设备可以通过该服务器软件系统查询其他设备的IP地址。在Android手机联入网络的时候,可以得到一个随机的IP地址,Android手机向具有固定IP地址的设备汇报自身的IP地址,并且查询CDMA监控终端的IP地址。查询成功后,尝试基于IP地址的通信,尝试成功后,即可进行通信。根据特定的数据协议,从信息中
8、提取数据,经过处理去掉数据中的控制部分,将相关的监测数据提取出来,在应用程序界面上给予显示,同时IP通信方式,按照数据传输协议,以规定的方式传送控制指令到CDMA控制终端。2. CDMA监控终端收发数据方案在CDMA监控终端接入网络的时候,可以得到一个随机的IP地址,CDMA监控终端向具有固定IP地址的设备汇报自身的IP地址,等待其余设备接入请求,接收到请求后,尝试基于IP地址的通信,尝试成功后,间歇性质的采集周围环境的温湿度数据,根据数据传输协议,将采集到的数据按照特定的格式,通过基于IP的通信方式方式传输数据给Android智能手机。同时根据特定的数据协议,从接收到数据中,去掉数据中的控制
9、数据,得到Android智能手机发送的控制指令,根据指令的内容做出相关的反应。 综合上述两种方案,区别在于所传输数据的方式不同。方案一:选用通用通用的短信方式传送数据,优点是初期开发难度、工作量较小,成本低廉。缺点是传输数据所需要的费用,短信是按条数收费,比起IP采用流量计费的方式要贵。方案二:采用基于IP的方式收发数据,优点是符合现代的通信潮流,比起短信是按条数收费方式,IP采用流量计费的方式要便宜。缺点是初期开发难度、工作量均较大,需要投入的硬件成本也高昂。通过比较我发现,第一种方案软、硬较第二种方案简单,易于开发实现,且充分利用了Android本身自带的资源,节约了成本。为此,我采用第二
10、种方案。第2章 硬件电路设计一种合适的GPRS网关的模块,该模块具有无线收发数据的能力。研究内容主要包括Android软件监控平台的设计,CDMA无线监控节点模块软件件接口设计、自定义传输协议设计。软件设计功能上包括:用户根据需要进行设备地址配置;连网与数据传输。2.1 CDMA网关模块硬件设计GPRS网关模块硬件以CDMA2000为处理器模块或高功率模块为核心,RS232、RS485作为用户设备接口,方便嵌入到用户设备中。图2-1 CDMA模块硬件设计图2.2 电源电路 (1)CDMA2000网关模块电源设计 图2-2 CDMA2000网关模块电源电路CDMA2000电源电路如图 2-2 所
11、示。 CC2530模块的工作电压为9V,选用稳压芯片进行电压变换。2.3 LED灯指示电路图2-3 LED灯指示电路LED电路如图5所示。LED1作为电源指示灯,有硬件确定。LED2和LED3由接收到的指令控制亮灭。2.4 CDMA2000网关UART接口电路通过UART串口电路与电脑进行数据传输,通过电脑的屏幕显示硬件工作状态,从而方便调试,在实际工作中不需要用到这个部分。图2-4 UART接口电路2.5网关模块PCB设计 (1)CDMA2000网关模块PCB图图2-5 GPRS网关PCB图根据CDMA2000网关模块的原理图,绘制出网关模块 PCB 图,如图2-4 所示。第3章 软件设计在
12、本章中,给出了CDMA终端监控节点软件设计流程图,给出了Android平台监控软件设计流程图,考虑到侧重点问题,详细的说明了Android平台监控软件的设计。3.1 CDMA终端监控节点软件设计流程图图3-1 CDMA终端监控节点软件设计流程图CDMA终端监控节点上电后首先对电路进行初始化处理,读取用户信息,读取成功后不断的尝试接入GPRS网络,联网成功后,判断有无指令通过GPRS网络传来,若有,指令Aandroid只能手机传送来的指令;接着查看定时3秒时间是否已到,如果3秒已到,读取温湿度信息,读取成功后,通过GPRS网络传送给Android智能手机,由Android只能手机负责信息的显示。
13、3.2 Android平台监控软件设计流程图图3-2 Android平台监控软件工作流程图Android软件开启后,输入正确的用户名和密码,可以登录系统,在系统中可以配置监控终端信息,可以通过此软件发送信息控制终端平台,终端平台每隔三秒钟发送信息给手机,手机通过监控平台将信息显示出来。3.3 Android监控软件详细设计与实现3.3.1 登录界面设计与实现进入登录画面,在这一过程中用户输入相关的个人账户信息,输入完成后点击登录按钮或者点击修改按钮,进入相关的界面。如果用户的个人信息连续输入错误次数超过3次,软件自动退出。图3-3 登录界面在上述图标中如果输入用户名和密码正确,并且选择修改密码
14、选项。进入修改密码界面。如果两次输入的密码都正确,返回到重新登录界面。以新的配置信息登录。如果连续3次输入两个表格中的输入不一致,退出程序。关键代码如下:/登录 class loginButtonListener implements OnClickListener int namePosition,passwdPosition; /存储用户名和密码的索引 /生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 Override public void onClick(View v) String username = usernameEdit.getText(
15、).toString(); String userpasswd = userpasswordEdit.getText().toString(); if(loginTimes=3) /如果输入次数不低于3次,结束。 finish(); /搜索是否存在username字符串,-1表示没有。 if( username.length()!=0& userpasswd.length()!=0& (namePosition = pass.indexOf(username) ) = 0 & ( passwdPosition = pass.indexOf(userpasswd) )=0 & ( namePos
16、ition + username.length() = passwdPosition ) ) Intent intent = new Intent(); /设置Intent对象要启动的Activity intent.setClass(login.this, SMSReceviedProjectActivity.class); /通过Intent对象启动另外一个Activity login.this.startActivity(intent); /注销这个Activity finish(); else Toast.makeText(login.this, 输入用户名或密码有误, Toast.LE
17、NGTH_SHORT).show(); loginTimes+; 用户可以在登录的时候,选择是否修改用户名和密码。图3-4 修改界面修改成功后,使用新的用户名和密码登录。关键代码如下:/修改用户名或者密码public class change extends Activity private TextView userpasswdChange=null; /新密码 private EditText userpasswdEditChange=null; private TextView userpasswdChange2=null; /第二次输入新密码 private EditText user
18、passwdEditChange2=null; private Button okButton=null; /确认按钮 private Button cancelButton = null ; /取消修改 int changeTimes = 0,loginTimes = 0; /记录输入次数 /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); requestWind
19、owFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.change); userpasswdChange=(TextView)findViewById(R.id.userpasswdChange); userpasswdEditChange=(EditText)findViewById(R.id.userpasswdEditChange); userpasswdChange2=(TextView)findViewById(R.id.userpasswdChange2); userpasswdEditChange2=(EditTe
20、xt)findViewById(R.id.userpasswdEditChange2); okButton=(Button)findViewById(R.id.okButton); okButton.setOnClickListener(new okButtonListener(); cancelButton=(Button)findViewById(R.id.cancelButton); cancelButton.setOnClickListener(new cancelButtonListener(); /确认 class okButtonListener implements OnCli
21、ckListener /生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 Override public void onClick(View v) /测试使用,没有在此处写代码。实际应用中需写入。 /取消 class cancelButtonListener implements OnClickListener /生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 Override public void onClick(View v) 3.3.2 地址配置界面设计与实现点击新建按钮新建地址信息,地址信息只有在此处输入时,才
22、会给予修改显示显示。个性化的配置地址信息,界面如下:图3-5 修改地址信息关键代码如下:public class AddressOperationDialog extends Dialog DbDataFactory dbDataFactory; /数据库操作类 AddressManagerActivity addressMangerActivity; EditText address;/地址 EditText telnum; / 号码 Button add; /添加按钮 Button cancel; /取消按钮 /记录操作数据 MyMessage mymessage; Help help;
23、public AddressOperationDialog(Context context,MyMessage mymessage) super(context); / TODO Auto-generated constructor stu this.addressMangerActivity=(AddressManagerActivity) context; this.mymessage=mymessage; protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stub super.o
24、nCreate(savedInstanceState); setContentView(R.layout.addressoperation); setTitle(添加地址信息); /初始化 init(); /初始化 private void init() / TODO Auto-generated method stub help=new Help(); dbDataFactory=new DbDataFactory(); address=(EditText)findViewById(R.id.address); telnum=(EditText)findViewById(R.id.telnu
25、m); /判断是操作还是修改 if(null!=mymessage) /更新的时候 将信息显示到控件 address.setText(mymessage.getAddress(); telnum.setText(mymessage.getTelnum(); /号码不可更改 cancel=(Button) findViewById(R.id.cancel); cancel.setOnClickListener(new Button.OnClickListener() public void onClick(View v) / TODO Auto-generated method stub dis
26、miss(); ); add=(Button) findViewById(R.id.add); add.setOnClickListener(new Button.OnClickListener() public void onClick(View v) / TODO Auto-generated method stub if(isEmptyData() /空数据给出提示 help.ToastMessage(addressMangerActivity, R.string.emptydata, 2000); else /不是空数据 MyMessage newMessage=null; Messa
27、ge msg=new Message(); if(null=mymessage) /新增 newMessage=getdata(0); msg.what=(int)dbDataFactory.addMyMessage(addressMangerActivity,newMessage ); dismiss(); else /更新 newMessage=getdata(mymessage.get_id(); dbDataFactory.updateMyMessage(addressMangerActivity,newMessage ); dismiss(); /回调addressMangerAct
28、ivity的updateDataHandler 更新数据 addressMangerActivity.updateDataHandler.sendMessage(msg); ); /获取数据 private MyMessage getdata(int id) / TODO Auto-generated method stub return new MyMessage(id, telnum.getText().toString(), address.getText().toString(),); private boolean isEmptyData() / TODO Auto-generate
29、d method stub if(telnum.getText().toString().trim().length()!=0) &(address.getText().toString().trim().length()!=0) return false; return true; 3.3.3 显示界面设计与实现软件开启并且配置后,显示效果如下。从图中可以看出,该应用程序成功的显示出了地点、温湿度、时间等信息,达到了设计要求。图3-6 监控显示关键代码如下:public Handler smsShowHandler=new Handler() SuppressWarnings(unchecked) public void handleMessage(Message msg) /取消进度条 if(progressDialog.isShow