毕业设计(论文)-基于Android 的智能手机远程监控软件.doc_第1页
毕业设计(论文)-基于Android 的智能手机远程监控软件.doc_第2页
毕业设计(论文)-基于Android 的智能手机远程监控软件.doc_第3页
毕业设计(论文)-基于Android 的智能手机远程监控软件.doc_第4页
毕业设计(论文)-基于Android 的智能手机远程监控软件.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JIANGSU UNIVERSITY OF TECHNOLOGY 本科毕业设计(论文)基于Android的智能手机远程监控软件学院名称: 电气信息工程学院 专 业: 通信工程 班 级: 09通信2W 学 号: 09313218 姓 名: 李 柱 指导教师姓名: 陶为戈 指导教师职称: 讲 师 二一三 年 六 月江苏理工学院毕业设计说明书(论文)基于Android的智能手机远程监控软件摘 要:关键词: The Design of remote monitoring software based on Android smartphonesAbstract: Keywords:I江苏理工学院毕业设计说明书(论文)目 录摘 要IAbstractI绪 论2第1章 课题分析与方案论证31.1 课题任务分析31.2 方案论证3第2章 硬件电路62.1 CDMA网关模块硬件设计62.2 电源电路72.3 LED灯指示电路72.4 CDMA2000网关UART接口电路72.5网关模块PCB设计8第3章 软件设计93.1 CDMA终端监控节点软件设计流程图93.2 Android平台监控软件设计流程图103.3 Android监控软件详细设计与实现113.3.1 登录界面设计与实现113.3.2 地址配置界面设计与实现143.3.3 显示界面设计与实现173.3.4 控制界面设计与实现19第4章 软件调试214.1 非代码部分调试214.1.1 JAVA环境配置214.1.2 Android模拟器214.1.3 系统剩余空间224.2 代码部分调试224.2.1 活动注册224.2.2 安装软件234.2.3 授权问题244.2.4 读卡24附件1 英中翻译Androdi平台介绍25Android 2.3.4 Platform25安卓平台2.3.430附件2 部分Android应用程序36参考文献48致 谢49江苏理工学院毕业设计说明书(论文)绪 论Android是Google发布的一款基于Linux核心的手机操作系统,Android是一种开源的、免费的移动计算软件平台,目前基于Android智能手机的用户数量众多。在智能手机操作系统中市场占有率最高。Android平台最大的优势就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。丰富的硬件,这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色, 却不会影响到数据同步、甚至软件的兼容。本课题是基于Android智能手机进行远程监控程序及其硬件监控终端开发的。移动性强 ,真正做到随时随地为用户提供服务。本说明书共分为4章,第一章课题分析与方案论证;第二章对监控终端硬件进行了说明;第三章对详细的对应用软件进行了分析;第四章有针对性的列举了Android应用软件在调试过程中出现的问题,并对问题作出了分析。设计的最终成果是能通过Android智能手机显示远程终端传来的数据,并通过指令实现对远程终端的控制。 第1章 课题分析与方案论证1.1 课题任务分析 本课题主要实现用Android智能手机显示远程监控终端传来的数据,并通过指令实现对远程终端的控制。谷歌公司为了方便用户Android平台上开发软件,使用了使用人数最多的JAVA语言作为主要的开发语言,开发环境是IBM开发的开源软件Ecplise。在开发Android应用软件软件之前,需要首先配置好开发环境,这其中包括Eclipse软件下载(免安装),JAVA虚拟机的安装,android开发包SDK的下载并作为插件添加到Eclipse中。运用实验室的CDMA终端模块,该模块通过GPRS网络发送数据给具有良好移动性的Android手机,Android手机将接收到的数据处理后显示出来,通过GPRS网络发送指令给终端模块从而控制终端模块。本设计研究并实现了通过无线设备获取远程终端监测信息。研究内容主要包括Android的系统架构、应用开发环境建立、智能手机远程监控应用软件开发、远程监控网关软硬件设计。模块软件功能上包括:用户根据需要进行数据检测、接口选择与配置;设备地址配置。基于应用的Android远程监控管理软件用于监控远程基站的温湿度环境。实现对远程基站检测节点终端的温度、湿度等状态参数的收集与管理。软件运行环境是Android2.2操作系统及其以上版本。具有掉电后台数据保护功能,适当修改可被广泛用于监测和管理远程数据终端。1.2 方案论证 尽管没有在课堂上系统的学习过JAVA语言及Android软件开发技能,但是由于JAVA语言设计的比C+简洁的很多,在有C语言的基础上自学JAVA语言,难度不是很大,谷歌为了推广Android,不但推出了便于使用的SDK开发包,还编写了大量帮助文档,同时也给出了一定数量的使用示例源代码,结合实验室的CDMA终端模块,通过价格合适的GPRS网络传送数据。本次方案论证主要对数据传送方式的选择。方案一:1. Android手机收发数据方案选用通用的短信方式收发数据,根据特定的数据协议,从接收到的短信中提取数据,经过处理去掉数据中的控制部分,将相关的监测数据提取出来,在应用程序界面上给予显示,同时通过短信的方式,按照数据传输协议,以规定的方式传送控制指令到CDMA控制终端。2. CDMA监控终端收发数据方案通过的短信方式收发数据,间歇性质的采集周围环境的温湿度数据,根据数据传输协议,将采集到的数据按照特定的格式,通过短信的方式传输数据给Android智能手机。同时根据特定的数据协议,从接收到的短信中提取数据,经过处理去掉数据中的控制部分,得到Android智能手机发送的控制指令,根据指令的内容做出相关的反应。方案二:1. Android手机收发数据方案选用网络的方式收发数据,购买一个固定的IP地址,在某个可以联入网络的设备上开发一款服务器软件(比如PC),该服务器软件具有的功能是储存相关设备的IP地址,并且相关设备可以通过该服务器软件系统查询其他设备的IP地址。在Android手机联入网络的时候,可以得到一个随机的IP地址,Android手机向具有固定IP地址的设备汇报自身的IP地址,并且查询CDMA监控终端的IP地址。查询成功后,尝试基于IP地址的通信,尝试成功后,即可进行通信。根据特定的数据协议,从信息中提取数据,经过处理去掉数据中的控制部分,将相关的监测数据提取出来,在应用程序界面上给予显示,同时IP通信方式,按照数据传输协议,以规定的方式传送控制指令到CDMA控制终端。2. CDMA监控终端收发数据方案在CDMA监控终端接入网络的时候,可以得到一个随机的IP地址,CDMA监控终端向具有固定IP地址的设备汇报自身的IP地址,等待其余设备接入请求,接收到请求后,尝试基于IP地址的通信,尝试成功后,间歇性质的采集周围环境的温湿度数据,根据数据传输协议,将采集到的数据按照特定的格式,通过基于IP的通信方式方式传输数据给Android智能手机。同时根据特定的数据协议,从接收到数据中,去掉数据中的控制数据,得到Android智能手机发送的控制指令,根据指令的内容做出相关的反应。 综合上述两种方案,区别在于所传输数据的方式不同。方案一:选用通用通用的短信方式传送数据,优点是初期开发难度、工作量较小,成本低廉。缺点是传输数据所需要的费用,短信是按条数收费,比起IP采用流量计费的方式要贵。方案二:采用基于IP的方式收发数据,优点是符合现代的通信潮流,比起短信是按条数收费方式,IP采用流量计费的方式要便宜。缺点是初期开发难度、工作量均较大,需要投入的硬件成本也高昂。通过比较我发现,第一种方案软、硬较第二种方案简单,易于开发实现,且充分利用了Android本身自带的资源,节约了成本。为此,我采用第二种方案。第2章 硬件电路设计一种合适的GPRS网关的模块,该模块具有无线收发数据的能力。研究内容主要包括Android软件监控平台的设计,CDMA无线监控节点模块软件件接口设计、自定义传输协议设计。软件设计功能上包括:用户根据需要进行设备地址配置;连网与数据传输。2.1 CDMA网关模块硬件设计GPRS网关模块硬件以CDMA2000为处理器模块或高功率模块为核心,RS232、RS485作为用户设备接口,方便嵌入到用户设备中。图2-1 CDMA模块硬件设计图2.2 电源电路 (1)CDMA2000网关模块电源设计 图2-2 CDMA2000网关模块电源电路CDMA2000电源电路如图 2-2 所示。 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章 软件设计在本章中,给出了CDMA终端监控节点软件设计流程图,给出了Android平台监控软件设计流程图,考虑到侧重点问题,详细的说明了Android平台监控软件的设计。3.1 CDMA终端监控节点软件设计流程图图3-1 CDMA终端监控节点软件设计流程图CDMA终端监控节点上电后首先对电路进行初始化处理,读取用户信息,读取成功后不断的尝试接入GPRS网络,联网成功后,判断有无指令通过GPRS网络传来,若有,指令Aandroid只能手机传送来的指令;接着查看定时3秒时间是否已到,如果3秒已到,读取温湿度信息,读取成功后,通过GPRS网络传送给Android智能手机,由Android只能手机负责信息的显示。3.2 Android平台监控软件设计流程图图3-2 Android平台监控软件工作流程图Android软件开启后,输入正确的用户名和密码,可以登录系统,在系统中可以配置监控终端信息,可以通过此软件发送信息控制终端平台,终端平台每隔三秒钟发送信息给手机,手机通过监控平台将信息显示出来。3.3 Android监控软件详细设计与实现3.3.1 登录界面设计与实现进入登录画面,在这一过程中用户输入相关的个人账户信息,输入完成后点击登录按钮或者点击修改按钮,进入相关的界面。如果用户的个人信息连续输入错误次数超过3次,软件自动退出。图3-3 登录界面在上述图标中如果输入用户名和密码正确,并且选择修改密码选项。进入修改密码界面。如果两次输入的密码都正确,返回到重新登录界面。以新的配置信息登录。如果连续3次输入两个表格中的输入不一致,退出程序。关键代码如下:/登录 class loginButtonListener implements OnClickListener int namePosition,passwdPosition; /存储用户名和密码的索引 /生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 Overridepublic void onClick(View v) String username = usernameEdit.getText().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 &( namePosition + username.length() = passwdPosition ) ) Intent intent = new Intent();/设置Intent对象要启动的Activityintent.setClass(login.this, SMSReceviedProjectActivity.class);/通过Intent对象启动另外一个Activitylogin.this.startActivity(intent);/注销这个Activityfinish(); elseToast.makeText(login.this, 输入用户名或密码有误, Toast.LENGTH_SHORT).show();loginTimes+; 用户可以在登录的时候,选择是否修改用户名和密码。图3-4 修改界面修改成功后,使用新的用户名和密码登录。关键代码如下:/修改用户名或者密码public class change extends Activityprivate TextView userpasswdChange=null;/新密码private EditText userpasswdEditChange=null;private TextView userpasswdChange2=null;/第二次输入新密码private EditText userpasswdEditChange2=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); requestWindowFeature(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=(EditText)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 OnClickListener /生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 Overridepublic void onClick(View v) /测试使用,没有在此处写代码。实际应用中需写入。 /取消 class cancelButtonListener implements OnClickListener /生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 Overridepublic void onClick(View v) 3.3.2 地址配置界面设计与实现点击新建按钮新建地址信息,地址信息只有在此处输入时,才会给予修改显示显示。个性化的配置地址信息,界面如下:图3-5 修改地址信息关键代码如下:public class AddressOperationDialog extends Dialog DbDataFactory dbDataFactory; /数据库操作类AddressManagerActivity addressMangerActivity;EditText address;/地址EditText telnum; /电话号码Button add; /添加按钮Button cancel; /取消按钮/记录操作数据MyMessage mymessage;Help help;public AddressOperationDialog(Context context,MyMessage mymessage) super(context);/ TODO Auto-generated constructor stuthis.addressMangerActivity=(AddressManagerActivity) context;this.mymessage=mymessage;protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.addressoperation); setTitle(添加地址信息); /初始化 init();/初始化private void init() / TODO Auto-generated method stubhelp=new Help();dbDataFactory=new DbDataFactory();address=(EditText)findViewById(R.id.address); telnum=(EditText)findViewById(R.id.telnum); /判断是操作还是修改 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 stubdismiss(););add=(Button) findViewById(R.id.add);add.setOnClickListener(new Button.OnClickListener() public void onClick(View v) / TODO Auto-generated method stubif(isEmptyData()/空数据给出提示help.ToastMessage(addressMangerActivity, R.string.emptydata, 2000);else/不是空数据MyMessage newMessage=null;Message 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();/回调addressMangerActivity的updateDataHandler 更新数据addressMangerActivity.updateDataHandler.sendMessage(msg););/获取数据private MyMessage getdata(int id) / TODO Auto-generated method stubreturn new MyMessage(id, telnum.getText().toString(), address.getText().toString(),);private boolean isEmptyData() / TODO Auto-generated method stubif(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.isShowing() progressDialog.cancel(); /显示数据 if(msg.what=0) / /状态为0 表示没有数据/ help.ToastMessage(SMSReceviedProjectActivity.this,R.string.nodata,2000); else /显示数据 String result=; myMessageList=(List) msg.obj; List mystatus=help.getMyStatus(myMessageList, SMSReceviedProjectActivity.this); for(int i=0;imystatus.size();i+) result+=mystatus.get(i).getAddress()+:+ |+mystatus.get(i).getPower()+ |+mystatus.get(i).getWaterlevel()+ |+mystatus.get(i).getPump()+ |+mystatus.get(i).getStatus()+; tv_show.setText(Html.fromHtml(result); Thread thread = new Thread() Override public void run() int waitingTime = 5000; / ms try Thread.sleep(3000); catch (InterruptedException e) e.printStackTrace(); finally /查询数据、线程启动 smsInfoThread=new SMSInfoThread(SMSReceviedProjectActivity.this,myMessageList); smsInfoThread.start(); ; thread.start(); ; ;3.3.4 控制界面设计与实现点击查询后启动查询界面,用户在第一个输入框中输入想查询终端地址,在第二个输入框中输入指令(目前只支持两种指令。指令格式是本机号+10001或者10000。比如本机号:12345678900,那么输入指令是:1234567890011111。其中以10001结尾表示打开LED1,以10000结尾表示关闭LED1)。图3-7 控制界面关键代码如下:public boolean onCreateOptionsMenu(Menu menu) menu.add(0, 0, 0, 控制); menu.add(0, 1, 1, 关于); return super.onCreateOptionsMenu(menu); public boolean onOptionsItemSelected(MenuItem item) super.onOptionsItemSelected(item); switch(item.getItemId() case 0: search();/选择“控制”选项 break; case 1: about();/选择“关于”选项 break; return true; /转入发送控制界面,本应用中使用的是谷歌自带的发送短信界面 private void search() Uri uri = Uri.parse(smsto:/0800000123); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra(sms_body, 格式:本机号+11111); startActivity(intent); 第4章 软件调试Android系统是一个很复杂的操作系统。在开发应用软件的中,出现了各种各样的问题,包括开发环境配置问题,开发语言使用问题,虚拟机不能模拟实际机器的问题。在本章中,将开发中遇到的一些错误罗列出来。4.1 非代码部分调试4.1.1 JAVA环境配置 问题:在启动Android开发平台Eclipse时,出现如图4-1所示错误提示:图4-1 JAVA环境配置提示分析解决:由于Eclipse运行需要JAVA环境的支持,所以在运行Eclipse之前需要下载并且安装一个JAVA虚拟机。当然其后的Android程序开发,也用到了JAVA环境。4.1.2 Android模拟器 问题:在编写好测试软件时,远行Android模拟器时,出现如图4-2错误提示:图4-2 Android模拟器提示分析解决:虚拟机没设置好或者版本低与程序中设定的版本。可以在Window- AVD Managernew,在弹出的对话框中输入name信息,在target中选择模拟器版本。考虑到使用到的API的级别(android各个平台API的级别不同)和更广泛的适用性(版本越低使用范围越大),本文中选择的是2.2版本。配置如图4-3所示:图4-3 Android模拟器配置4.1.3 系统剩余空间问题:在开发环境及虚拟机配置好后,仍不能启动虚拟机,错误报告如下:2013-02-22 15:41:46 - Emulator NAND: could not write file C:DOCUME1ADMINI1LOCALS1TempAndroidEmulatorTMP162.tmp, No space left on device 分析解决:由于Android虚拟机较大,对系统盘有一定大要求,这儿因为系统盘不足,导致Android虚拟机无法启动,建议系统盘预留1GB空闲空间用于Android开发。4.2 代码部分调试4.2.1 活动注册 问题:启动Android模拟器后,点击登录的时候出现如图4-3所示异常提示:图4-3 Android异常提示上面的提示的很模糊,参考错误报告:图4-4 Eclipse错误报告分析解决:图中灰色部分给出了很明显的提示,没有发现可直接使用的“activity class”(找不到com.android.activity.login),在android开发中为了管理各个“界面”,需要在一个教“AndroidManifest.xml”的文件中注册活动界面的login。4.2.2 安装软件问题:在使用Android手机调试的时候,出现如下的错误报告2013-05-22 22:46:59 - SMSReceviedProject Installing SMSReceviedProject.apk.2013-05-22 22:47:01 - SMSReceviedProject Re-installation failed due to different application signatures.2013-05-22 22:47:01 - SMSReceviedProject You must perform a full uninstall of the application. WARNING: This will remove the application data!2013-05-22 22:47:01 - SMSReceviedProject Please execute adb uninstall com.android.activity in a shell.2013-05-22 22:47:01 - SMSReceviedProject Launch canceled! 分析解决:因为在Android手机中手工安装过了这个软件,Android模拟器不能删除已经手工安装的软件。手动卸载后,重新运行即可。4.2.3 授权问题问题:在Android手机上运行软件时,Ecplipse出现如图4-4所示错误:图4-5 Eclipse授权错误报告分析解决:由于安全问题,Android要求安装运行的软件必须在安装的时候提示软件所需得到的权利,用户接收后才可获得相关的权利。由于在设计软件时,没有在“AndroidManifest.xml”中声明所需要的权利,导致软件在使用一些权利时,被拒绝。可以在“AndroidManifest.xml”中声明所需的权利,即可运用。4.2.4 读卡问题:在输入初始化的登录名和密码后,出现如图图4-6所示的异常报告:图4-6 异常报告分析解决:由于在登录的时候,需要读写“/SD”目录下的数据。在手机上插入SD卡,即可正常的运行。附件1 英中翻译Androdi平台介绍Android 2.3.4 Platform API Level:10Android 2.3.4 is a maintenance release that adds several bug fixes and patches to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, Android 2.3.4 brings support for the Open Accessory API to mobile devices, through the optional Open Accessory Library. For developers, the Android 2.3.4 platform and the Open Accessory Library are available together in the latest version of the Google APIs Add-On, a downloadable component for the Android SDK.To get started developing or testing against Android 2.3.4, use the Android SDK Manager to download the latest version of the Google APIs Add-On into your SDK. For more information, see Adding SDK Components. If you are new to Android, download the SDK Starter Package first.For a high-level introduction to Android 2.3, see the Platform Highlights.RevisionsThe sections below provide notes about successive releases of the Android 2.3.4 platform component for the Android SDK, as denoted by revision number. To determine what revision(s) of the Android 2.3.4 platforms are installed in your SDK environment, refer to the Installed Packages listing in the Android SDK and AVD Manager.API OverviewAndroid 2.3.4 provides the same framework API to applications as Android 2.3.3 (API level 10). For a summary of the API, see the Android 2.3.3 version notes.Open Accessory LibraryOpen Accessory is a new capability for integrating connected peripherals with applications running on the platform. The capability is based on a USB (Universal Serial Bus) stack built into the platform and an API exposed to applications. Peripherals that attach to Android-powered devices as accessories connect as USB hosts. Open Accessory is introduced in Android 3.1 (API level 12), but is made available to devices running Android 2.3.4 by means of an optional external library, the Open Accessory Library. The library exposes a framework API that lets applications discover, communicate with, and manage a variety of device types connected over USB. It also provides the implementation of the API against parts of the Andro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论