基于Android的点名系统设计_第1页
基于Android的点名系统设计_第2页
基于Android的点名系统设计_第3页
基于Android的点名系统设计_第4页
基于Android的点名系统设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

绪论自2008年谷歌公司推出了一款名为Android的开源智能手机操作系统以来,Android凭借其良好的操作体验和界面效果以及开放性,受到了多方重视。以此为引,安卓手机、电视、平板电脑等安卓系统产品,都能凭借可开发性、高度开放性和出色的兼容性等优势在全球市场获得认可。安卓系统是基于Linux的操作系统,其源代码具有高度的自由性和开放性,安卓系统开发至今,经历了多个版本的更新,并被广泛地应用于移动设备领域。市场研究机构IDC发布的研究报告显示,从2008年10月第一部装载安卓系统的智能手机发布至2019年底,不到十几年的时间,基于Android平台的手机已占全球市场份额的87%,一跃成为市场份额最大的操作系统。反观基于IOS系统及其他系统的手机,市场份额仅剩13%。截止2019年,全球采用安卓系统的设备数量已超过25亿台,尤其是在智能手机市场。多种智能的安卓App也因此逐渐成长起来。现如今很多高校学生出勤率低下,老师多采用纸质名单课堂点名答到、挨个清查人数的传统方式,因此留下了许多问题。所以我希望通过自己所学知识编写一款基于Android平台的点名系统软件,来促进教学考勤及管理的执行与发展,这是课堂考勤方法的一次创新尝试,也是高效信息化建设的具体实施。虽然现存的点名软件并不在少数,但其中多数只用简单地在一定时间范围内通过所登录的账号来完成签到操作,但学生仍然可以通过社交软件通知来进行签到,这样就使其操作失去了意义。因此,本系统通过借助高德地图的地理围栏功能来进行定位签到,由老师来决定学生的签到地点和日期,限制了学生的签到范围,能够更加准确有效地完成点名操作。本论文完成的主要工作有:(1)基于Android定位SDK,借助地理围栏功能对点名系统的签到功能进行优化设计以及流程规划。(2)根据老师和学生的功能需求,完成各个模块的功能。(3)简明的UI设计,让系统更便于操作和使用,提升用户体验。1系统开发环境及相关技术1.1开发工具及环境介绍开发基于Android平台的应用程序需要以下工具:(1)JDK:JavaSEDevelopmentKit,Sun公司提供的用于开发Java应用程序的开发包,它包括了java编译器、Java运行时环境和各种工具资源的获取,以及常用的Java类库等。(2)AndroidSDK:SoftwareDevelopmentKit即软件开发工具包。被软件开发者用于为特定的软件框架及软件包、硬件平台、操作系统等建立应用软件的开发工具的集合。(3)AVD:即安卓虚拟设备。在测试时,AndroidStudio为开发人员提供的可以在电脑上直接测试应用程序的虚拟设备,在设备缺失或者不兼容情况下能够方便的进行测试。虚拟设备管理器选择及设置界面如下图1-1所示。图1-1AndroidStudio设备设置界面Android应用程序基于Java语言开发,同时需要基于虚拟机,故需要以下软件,才能搭建Android开发环境,同时还需结合AndroidStuido系统自带的SQLite3数据库进行开发。(1)AndroidStudio(版本号3.5.3)(2)AndroidSDK(版本号29.0.2)(3)JavaSDK(版本号1.8)1.2主要技术介绍1.2.1安卓应用程序的解析了解Android应用程序的目录结构,可以为程序构建做好准备,安卓项目中的主要目录及文件介绍如下:(1)src目录:存放的是该项目的源代码,在开发过程中,大多数是对该目录下的源代码文件进行编写。(2)libs目录:项目中使用到的第三方jar包存储目录,其目录下jar包会被自动添加到构建路径。如本系统所使用的高德地图第三方jar包。(3)assets目录:项目相关资源文件存放目录。如数据库文件。(4)res目录:应用中经常使用的资源文件存放目录。如图片、布局文件、参数文件。(5)test目录:用来编写UnitTest测试用例,这是对项目进行自动化测试的另一种方式。(6)AndroidManifet.xml文件:Android应用程序的清单文件,是整个Android应用程序的描述文件。同时,安卓应用框架制定了严格的权限系统,必须声明正确声明权限才能使用相应功能,在AndroidManifest.xml文件中需要为定位系统指定相应的权限,系统权限说明如下表1-1所示。表1-1系统权限表权限作用ACCESS_NETWORK_STATE获取运营商信息,用于支持提供运营商信息相关的接口ACCESS_WIFI_STATE访问wifi网络信息,wifi信息会用于进行网络定位CHANGE_WIFI_STATE获取wifi权限信息进行网络定位INTERNET请求访问网络ACCESS_FINE_LOCATION用于访问GPS定位ACCESS_LOCATION_EXTRA_COMMANDS提高GPS定位速度WRITE_EXTERNAL_STORAGE用于写入缓存定位数据READ_EXTERNAL_STORAGE读取缓存数据READ_PHONE_STATE读取当前手机状态1.2.2安卓的基本组件安卓有以下四大组件:(1)Activity:Android中最常用组件,应用程序表示层,类似于屏幕,其包含三个状态:运行态、暂停态、停止。Activity的生命周期如下图1-2所示。(2)BroadcastReceiver:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁。(3)Service:一种不需要用户界面就能够长期在后台运行的应用组件。其运行能被其他组件所启动(如Activity),即使启动服务的组件(Activity)被销毁或者出错,它也会在后台一直运行。此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信(IPC)。(4)ContentProvider:屏蔽了底层的数据管理和服务等细节的一种数据管道。以标准化的方式在Android应用间共享数据。由于数据库在Android其中是私有的,假设须要在进程间传递数据,则能够使用AIDL/Binder或创建一个ContentProvider,可是不能跨越进程/包边界直接来使用数据库。一个ContentProvider类实现了一组标准的方法接口,从而可以让其它的应用保存或读取此ContentProvider的各种数据类型。也就是说,一个程序能够通过实现一个ContentProvider的抽象接口将自己的数据暴露出去。用户能够方便灵活的实现ContentProvider所封装的数据存储以及增删改查等,但所有的ContentProvider必须实现一个对外统一的接口(URI)。图1-2Activity的生命周期1.2.3XML简介Android中的界面布局文件,常量资源文件和系统配置文件都是用XML写的,所以了解XML也很有必要。XML(可扩展标记语言)与HTML一样并不是真正的语言,而是创建符合XML准则的语言的标准。它是一种自描述语言,被用来传输和存储数据。XML的基本准则如下:(1)XML元素要有结束标记;(2)属性必须使用引号;(3)XML元素必须合理包含;(4)XML标记是大小写区分明显,与HTML不同;(5)使用XML,空白部分不会被解析器自动删除。1.3数据库介绍1.3.1SQLite简介SQLite是AdroidStudio开发工具的内置关系型数据库,是一种轻量级的数据库解决方案。但却同时支持多数的SQL标准,虽然所用场合不多,但在特定场合下优于MySQL数据库等。与其他基于客户端和服务器的数据库不同,为合理开发Android应用程序,SQLite是一种嵌入到程序内部的数据库,其所有数据都存放在单个.db格式文件中,这些特性都使其十分适合于移动平台下的数据处理。1.3.2SQLite数据库操作对数据库进行操作,需创建一个继承自SQLiteOpenHelper类的子类,其本身为抽象类,实例化以使用其方法,子类需要实现onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)两个方法,通过调用SQLiteOpenHelper对象的getWritableDatabase方法或getReadableDatabase方法得到一个SQLiteDatabase类的对象,再由此对象调用其静态方法来创建或打开数据库,主要方法如下:(1)openDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory,intflags),打开指定路径的数据库文件。(2)openOnCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory),路径不存在此数据库时,创建数据库。(3)Create(SQLiteDatabase.CursorFactoryfactory),创建一个内存数据库,内存数据库用于对数据的处理速率要求较高情况。除使用SQLiteDatabase类的静态方法外,还可以调用Context对象的openOnCreateDatabase方法来创建或打开数据库。Context对象同时还包括对其他数据库操作的方法。

2系统的需求分析2.1研究目标(1)了解Android应用程序的设计和开发过程。(2)使用多种组件进行基于Android平台的点名系统的软件开发。(3)获取key权限在Android平台实现定位及地理围栏功能。本系统是基于Android的开发环境,运用其自带SQLite数据库上的数据,开发出了针对Android平台的点名系统。2.2可行性分析在本系统构建之中,可行性分析不可或缺,以下主要从技术可行性、操作可行性、经济可行性三个方面来进行论述。2.2.1技术可行性AndroidStudio、SQLite数据库都已经历多个版本的更新,有其成熟、稳定的开发技术,目前已广泛用于手机App的开发。高德开放平台目前开放了Android地图SDK以及Android地图SDK专业版两套地图SDK工具。高德地图AndroidSDK是一套用于地图开发调用的API,开发者可以在自己的Android应用中加入地图相关的各种元素和功能,包括:地图显示(含室内、室外地图)、地图光标、地图交互、在地图上绘制、地理编码、离线地图等功能。通过在高德地图平台上注册个人账号申请Key配置到项目“AndroidManifest.xml”文件中配置权限来得到开发App的支持。综上所述,本系统在技术上可行。2.2.2操作可行性App仅依赖于Androidstudio自带的SQLite数据库,不需要繁杂的交互操作,且图形界面简洁明了,能够产生较好的用户体验。对老师而言,对于学生的管理和点名操作功能提示明确,可以较好地完成对课堂考勤的管理。2.2.3经济可行性Androidstudio、SqliteEpertProfession(数据库可视化软件)都是免费开源的软件,且高德地图Key的申请获取也是面向个体的免费功能。2.3系统的主要功能通过对点名系统的初步了解、以及体验其相关流程,总结出本系统所需要的功能如下:(1)注册功能:使用系统之前必须注册系统,通过选择老师或者学生进行注册相关信息,在数据库中生成。(2)登录功能:与注册功能关联所以需用进行账号密码以及身份的验证,验证成功后方可使用系统。学生界面:(1)点名功能:此功能可以查看点名发起老师以及发起时间,通过点击签到进入下一级界面,同时获取学生的定位信息,在地图上显示老师发起签到地点的围栏半径。根据学生的定位信息来判断是否能够进行签到,不在范围内则不能进行签到。(2)查看作业功能:此功能可以查看作业发起老师以及老师发布的作业相关信息。(3)请假功能:此功能可以由学生填写请假相关信息并发布至老师界面。老师界面:(1)点名功能:此功能可以完成对点名科目以及点名地点、地理围栏半径的设置及删除,设置成功后学生界面可视。(2)作业管理功能:老师可以完善作业信息,同时能对作业进行发布和已发布作业信息的删除操作。(3)学生管理功能:老师可以添加新的学生用户信息和删除已有学生用户信息。(4)学生请假查看功能:可以了解不同学生发布的请假信息。从上述的描述中可以基本了解软件的功能需求:本App是一个运用Android客户端+SQLite数据库的应用程序,启动Android上的应用程序后可以注册登录、点名、查看、删除信息等。安卓应用程序上的数据是通过SQLite数据库存取的。2.3.1系统的用例图用例图能够展示出参与者与用例及其互相之间的关系,用于描述系统共能的动态视图。(1)本系统的老师用例图展示了老师与签到点的设置发布删除、作业信息的发布删除、学生的管理以及对请假信息的查询互相之间的关系。老师用例图如图2-1所示。图2-1老师用例图(2)本系统的学生用例图展示了学生对于老师所发布的定位签到信息的查看和签到操作、作业信息的查看以及学生自主对请假信息的操作互相之间的关系。学生用例图如图2-2所示。图2-2学生用例图2.3.2系统的数据流图用户经过注册登录本应用程序后进入功能模块选择界面,用户随后可以选择要进行的操作及获取其他信息,系统获取信息后,对应的下一级功能模块或界面会查看相应的数据库,将得到的数据信息返回并显示在界面上。系统的部分数据流图如图2-3所示。2-3系统的数据流图3系统的概要设计3.1功能设计依据前文进行的需求分析,得到本系统的功能模块图如图3-1所示。3-1系统功能模块图3.2系统功能模块设计与分析3.2.1用户注册登录模块分析用户进入应用程序注册登录界面,选择身份进行注册,进行账户密码验证操作,判断身份,进入主界面。具体流程图如图3-2所示。图3-2用户登录模块流程图3.2.2签到管理模块分析用户以老师身份登录系统后,可以生成或删除新的签到,同时进行签到点、签到科目、签到时间、地理围栏半径的设置。具体流程图如图3-3所示。图3-3签到管理模块流程图3.2.3作业管理模块分析用户以老师身份登录系统后,通过完善作业的标题及内容信息发布作业。具体流程图如图3-4所示。3-4作业管理模块流程图3.2.4学生管理模块分析用户以老师身份登录系统后,可以查看已有学生用户添加和删除学生用户。具体流程图如图3-5所示。3-5学生管理模块流程图3.2.5请假管理模块分析用户以老师身份登录系统后,可以查看学生发布的请假信息,其将展示发布时间及发布人信息。具体流程图如图3-6所示。3-6请假信息模块流程图3.2.6学生签到模块分析用户以学生身份登录系统后,可以进行签到操作,通过打开App定位权限来判断是否进入签到点。能否进行签到操作。具体流程图如图3-7所示。3-7学生签到模块流程图3.2.7作业信息模块分析用户以学生身份登录系统后,可以查看老师发布的作业信息目录。具体流程图如图3-8所示。3-8作业信息模块流程图3.2.8学生请假模块分析用户以学生身份登录系统后,可以发布请假信息,其用户名、发布时间、标题、内容将被展示在老师界面。具体流程图如图3-9所示。3-9学生请假模块

4数据库设计4.1数据库概念模型设计数据库概念模型表达方式众多,其中ER模型在数据库设计领域得到了广泛的认可和使用,其使用实体-联系图(Entity-Relation)来建立数据模型。通常将它简称为ER图,ER图提供了表示实体(即数据对象)、属性和联系的方法,其包括实体、联系、属性等三个基本成分。(1)用户实体属性图包提供了用户(学生/老师)实体和其用户名、密码、学号/工号、电话的基本属性以及之间的联系。用户实体属性图如图4-1所示:4-1用户实体属性图(2)签到实体属性图提供了签到实体和其发起人、时间、中心点、范围、课程的基本属性以及之间的联系。签到实体属性图如图4-2所示:4-2签到实体属性图(3)作业实体属性图提供了作业实体和其发布老师信息、标题、内容、发布时间的基本属性以及之间的联系。作业实体属性图如图4-3所示:4-3作业实体属性图(4)请假实体属性图提供了请假实体和其请假学生信息、标题、内容、发布时间的基本属性以及之间的联系。请假实体属性图如图4-4所示:4-4请假实体属性图4.2数据库表设计(1)本系统使用到的用户数据库表user包含了用户的基本信息,如用户名UserName、密码PassWord、学号/工号EduNum等,其详细信息及其主键如下表4-1所示。表4-1用户表user列名数据类型(精度范围)说明空/非空约束条件IDinteger(10)学生/老师非空主键UserNamevarchar(20)用户名非空PassWordvarchar(20)密码非空EduNumvarchar(20)学号/工号非空Phonevarchar(20)电话非空Typeinteger(10)用户类型非空(2)本系统使用到的作业信息数据库表ZuoYe包含了作业的基本信息,如作业信息的发布人PublishUserName、作业的标题Title、以及发布时间Time等,其详细信息及其主键如下表4-2所示。表4-2作业信息表ZuoYe列名数据类型(精度范围)说明空/非空约束条件IDinteger(10)学生非空主键PublishUserNamevarchar(20)用户名非空Titlevarchar(20)标题非空Timechar(20)发布时间非空Typeinteger(10)用户类型非空Contentvarchar(200)内容非空(3)本系统使用到的作业信息数据库表QingJia包含了学生请假页面的基本信息,如请假信息的发布人PublishUserName、请假信息的标题Title、以及发布时间Time等,其详细信息及其主键如下表4-3所示。表4-3请假信息表QingJia列名数据类型(精度范围)说明空/非空约束条件IDinteger(10)学生非空主键PublishUserNamevarchar(20)用户名非空Titlevarchar(20)标题非空Timechar(20)发布时间非空Typeinteger(10)用户类型非空Contentvarchar(200)内容非空

(4)本系统使用到的签到信息数据库表AttenceLoc包含了签到页面的基本信息,如签到点CenterPoint、签到时间AttenceTime、签到围栏半径Radius等,其详细信息及其主键如下表4-4所示。表4-4签到信息表AttenceLoc列名数据类型(精度范围)说明空/非空约束条件IDinteger(10)学生/老师非空主键CenterPointvarchar(20)签到中心设置非空CenterAddressvarchar(20)签到地点空AttenceTimechar(20)签到时间空Radiusinteger(8)围栏半径非空AttenceContentvarchar(200)签到科目空4.3数据库的连接AndroidStudio环境下实现SQLite数据库的主要部分连接代码如下。publicclassMySQLiteHelperextendsSQLiteOpenHelper{//调用父类构造器publicMySQLiteHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){super(context,name,factory,version);}publicvoidonCreate(SQLiteDatabasedb){db.execSQL("createtableifnotexistshero_info("+"idintegerprimarykey,"+"namevarchar,"+"levelinteger)");}publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){}}//使用这个类来创建一个数据库并对数据库进行操作MySqliteHelpermyHelper=newMySQLiteHelper(this,"Attence.db",null,1);SQLiteDatabasedb=myHelper.getWritableDatabase();db.execSQL("DROPTABLEIFEXISTSqingjia");onCreate(db);

5系统功能实现5.1用户注册登录功能的实现用户进入应用程序登录界面后选择身份进行注册,通过填写用户名、密码、电话、学号/工号信息完成账户注册操作。选择身份及注册界面运行效果如图5-1所示。5-1注册登录详情页面通过数据库表user中type字段区用户类型进行注册,为用户选择身份设置setOnClickListener监听事件,用户点击用户注册触发onclick事件,调用setContentView()方法并使用Intent意图机制来实现跳转activity_reg.xml注册页面,通过添加注册button完成信息注册传递回数据表user并跳转回activity_login.xml。5.2签到管理功能的实现老师界面点击添加签到跳转到签到点设置界面,完成签到点信息补充并生成签到点可以进行签到点的发布。运行效果如下图5-2所示。5-2签到点的设置发布界面5.2.1定位功能的实现通过前面介绍的在AndroidManifest.xml中添加为使用高德地图获取的开发者API_KEY来完成定位。在获取定位信息前初始化,具体实现代码如下:publicclassMyApplicationextendsApplication{publicstaticLocationBeanlocationData=null;publicstaticlongtime=0;@OverridepublicvoidonCreate(){super.onCreate();LocationUtils.initLocation(getApplicationContext());//获取位置LocationBeanlocation=LocationUtils.getLocation();if(location==null){Toast.makeText(this,"无位置信息,定位时间"+MyApplication.time,Toast.LENGTH_SHORT).show();}else{}//处理位置信息publicvoidonLocationChanged(AMapLocationamapLocation){if(mListener!=null&&amapLocation!=null){if(amapLocation!=null&&amapLocation.getErrorCode()==0){Log.e(TAG,"onLocationChanged:");mListener.onLocationChanged(amapLocation);//显示系统小蓝点}else{StringerrText="定位失败,"+amapLocation.getErrorCode()+":"+amapLocation.getErrorInfo();Log.e("AmapErr",errText);}}}5.2.2签到点发布与删除签到点参数设置完毕之后,点击发布签到点触发onclick事件,使用Intent机制跳转到item_attence_list.xml界面显示已发布的签到点。程序通过在监听器中判断发生点击事件的位置即position,来辨别用户选择的功能模块,再决定系统流程的走向。这里对签到点的删除也是这样实现的,具体代码如下。vh.txt_edit.setVisibility(View.GONE);vh.txt_del.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){dataAccess.delUser(list.get(position));T.showShort(context,"删除成功");list_order.remove(list.get(position));shopAdapter.notifyDataSetChanged();}});}签到点目录界面如下图5-3所示。5-3签到科目信息目录5.3作业管理功能的实现5.3.1作业发布功能通过调用setcontentView来关联到activity_add_zuo_ye.xml布局文件界面,同时引入Toolbar来生成发布作业的导航栏以及主界面的返回键,且使用Intent机制进行界面跳转。在布局界面添加EditText来实现提示信息。返回及提示信息主要实现代码如下。setSupportActionBar(toolbar);getSupportActionBar().setDisplayHomeAsUpEnabled(true);toolbar.setNavigationOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){onBackPressed();}});edt_title=(EditText)findViewById(R.id.edt_title);edt_content=(EditText)findViewById(R.id.edt_content);btn_send=(Button)findViewById(R.id.btn_send);btn_send.setOnClickListener(this);}具体界面如下图5-4所示。5-4作业信息发布界面5.3.2作业信息目录此处展示的目录信息是通过自定义RecyclerView.ViewHolder方法实现,RecyclerView用来实现回收和定位屏幕上的视图,并且创建ViewHolder,ViewHolder来容纳View视图。以此来完成对大量作业信息的展示管理。具体实现代码如下。classViewHolderextendsRecyclerView.ViewHolder{ViewitemView;privateCardViewcard_view;privateImageViewiv_face;privateTextViewtxt_name;privateTextViewtxt_phone;privateTextViewtxt_num;privateTextViewtxt_del;privateTextViewtxt_edit;publicViewHolder(Viewview){super(view);itemView=view;card_view=(CardView)itemView.findViewById(R.id.card_view);txt_title=(TextView)itemView.findViewById(R.id.txt_title);txt_content=(TextView)itemView.findViewById(R.id.txt_content);txt_user=(TextView)itemView.findViewById(R.id.txt_user);txt_publishTime=(TextView)itemView.findViewById(R.id.txt_publishTime);txt_del=(TextView)itemView.findViewById(R.id.txt_del);txt_edit=(TextView)itemView.findViewById(R.id.txt_edit);详情界面如下图5-5所示。5-5作业信息目录详情界面5.4学生管理功能的实现通过学生管理功能模块老师可以对学生进行增删,以及目录的查看。直接使用选项菜单optionsMenu方法来显示已有的学生用户信息目录。使用MenuInflatermenuInflater=getMenuInflater();方法来获取当前菜单的对象,创建菜单资源文件gengzong_add_studenti.xml,并指定其为getMenuInflater().inflate(R.menu.option,menu)的资源填充对象。从数据库表User中获取学生信息并通过showView()方法实现目录输出。详情界面如下图5-6所示。5-6学生管理详情界面5.5请假管理功能的实现以list.get(position)方法向数据库表ZuoYe中获取发布时间和发布人信息,通过自定义RecyclerView.ViewHolder方法实现以列表展示。然后以setOnClickListener来监听删除事件数据库表ZuoYe完成对请假信息的删除。并使用list.remove()来删除目录中信息。主要实现代码如下。publicvoidonBindViewHolder(RecyclerView.ViewHolderholder,finalintposition){ViewHoldervh=(ViewHolder)holder;vh.txt_del.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){dataAccess.delGongGao(list.get(position));T.showShort(context,"删除成功");list_order.remove(list.get(position));shopAdapter.notifyDataSetChanged();}});}详情界面如下图5-7所示5-7请假信息详情界面5.6学生签到功能的实现5.6.1围栏功能的实现通过创建地理围栏对象GeoFenceClient,同时实例化地理围栏客户端,设置希望侦测的围栏触发行为,默认只侦测用户进入围栏的行为。具体实现代码如下。//地理围栏客户端privateGeoFenceClientfenceClient=null;//要创建的围栏半径privatefloatfenceRadius=0.0F;//触发地理围栏的行为,默认为进入提醒privateintactivatesAction=GeoFenceClient.GEOFENCE_IN;//地理围栏的广播actionprivatestaticfinalStringGEOFENCE_BROADCAST_ACTION="com.example.geofence.round";//记录已经添加成功的围栏privateHashMap<String,GeoFence>fenceMap=newHashMap<String,GeoFece>();同时需要对自定义围栏进行图形边界绘制(本系统使用圆形围栏),自定义围栏一次接口调用只可以穿件一个围栏。圆形围栏需要提供中心点,以及半径。mGeoFenceClient.addGeoFence(Pointpoint,floatradius,StringcustomId);围栏创建完毕之后信息会通过GeoFenceListener进行回调。可以在回调中知道创建围栏成功与否,以及查看所创建围栏的具体内容。具体实现代码如下。//创建回调监听GeoFenceListenerfenceListenter=newGeoFenceListener(){@OverridepublicvoidonGeoFenceCreateFinished(List<GeoFence>geoFenceList,interrorCode){if(errorCode==GeoFence.ADDGEOFENCE_SUCCESS){//判断围栏是否创建成功tvReult.setText("添加围栏成功!!");}//geoFenceList是已经添加的围栏列表,可据此查看创建的围栏else{tvReult.setText("添加围栏失败!!");}}};mGeoFenceClient.setGeoFenceListener(fenceListenter);//设置回调监听详情界面如下图5-8所示。5-8学生签到详情界面5.6.2围栏外签到功能实现用户与围栏位置发生变化的行为称为围栏触发行为,围栏触发行为也是用户进入围栏、退出围栏、在围栏内停留这三种行为的统称,行为的触发是通过Android的广播进行发送的。可以应用setActiveAction(int[]actions)方法设置希望侦测到的围栏触发行为。首先需要创建并设置PendingIntent,其可以看作为对Intent的一个封装,在触发围栏行为时执行。具体实现代码如下。//定义接收广播的action字符串publicstaticfinalStringGEOFENCE_BROADCAST_ACTION="com.location.apis.geofencedemo.broadcast";//创建并设置PendingIntentmGeoFenceClient.createPendingIntent(GEOFENCE_BROADCAST_ACTION);第二步进行广播监听的创建以及注册,实现代码如下。privateBroadcastReceivermGeoFenceReceiver=newBroadcastReceiver(){@OverridepublicvoidonReceive(Contextcontext,Intentintent){if(intent.getAction().equals(GEOFENCE_BROADCAST_ACTION)){//解析广播内容}}};//注册广播IntentFilterfilter=newIntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);filter.addAction(GEOFENCE_BROADCAST_ACTION);registerReceiver(mGeoFenceReceiver,filter);最后通过在之前创建的监听器中通过onReceive方法对广播内容进行解析。实现代码如下。//获取BundleBundlebundle=intent.getExtras();//获取围栏行为intstatus=bundle.getInt(GeoFence.BUNDLE_KEY_FENCESTATUS);//获取自定义的围栏标识StringcustomId=bundle.getString(GeoFence.BUNDLE_KEY_CUSTOMID);//获取围栏IDStringfenceId=bundle.getString(GeoFence.BUNDLE_KEY_FENCEID);//获取当前有触发的围栏对象GeoFencefence=bundle.getParcelable(GeoFence.BUNDLE_KEY_FENCE);在围栏外签到触发事件运行详情如下图5-8所示。5-9围栏外签到详情界面5.7查看作业信息功能的实现与老师界面查看作业信息类似,以list.get(position)、RecyclerView.ViewHolder来实现对数据库表ZuoYe的查询和展示,但此处通过判断用户类型通过View类的setVisibility(View.GONE)和setVisibility(View.VISIBLE)方法设置是否显示组件,以此来根据用户类型显示删除和编辑按钮。具体实现代码如下。if(user.getType()==1){vh.txt_del.setVisibility(View.GONE);//组件看不到,不占用布局空间。vh.txt_edit.setVisibility(View.GONE);}else{vh.txt_del.setVisibility(View.VISIBLE);vh.txt_edit.setVisibility(View.VISIBLE);//组件正常显示}vh.txt_edit.setVisibility(View.GONE);查看作业目录详情界面如下图5-10所示。5-10查看作业详情界面5.8学生请假功能的实现通过调用setcontentView方法关联到activity_add_qing_jia.xml布局文件界面,在其界面添加一个发布Button跳转回请假信息列表,同时引入Toolbar来生成发布请假信息的导航栏以及主界面的返回键,且使用Intent机制进行界面跳转。在布局界面添加文本表示控件TextView、文本编辑控件EditText来显示标题、内容以及输入提示信息。最后调用dataAccess.insertQingJia()方法往数据库表QingJia中插入数据。请假详细界面如下图5-11所示5-11学生请假详情界面

6系统测试因为是基于安卓的系统开发,所以在测试系统各个功能模块是否完成基本需求时多以黑盒测试为主,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,在测试定位功能时出现的无法正确显示定位信息主要有以下问题:(1)未开启应用定位权限。在进入学生签到或签到管理模块时,不显示实时定位(定位信息错误)。在本系统中已经在AndroidManifest.xml中配置了定位权限,对于这种问题只需要在手机应用权限管理中开启定位权限即可正确获取定位信息。(2)未开启手机wifi或者手机网络。定位功能的实现需要开启wifi或者网络来访问网络信息用来进行网络定位。本系统已配置相关权限,连接wifi或者4G/5G网络可以正确进行定位。以及对主界面各个功能模块测试:(1)注册功能模块测试:注册功能模块测试主要是检测当点击注册按钮时是否能跳转回登录界面,且注册信息未完成时能否进行正确提示。测试用例如表6-1所示:目的:检测点击事件的处理界面是否正确跳转,是否对行为进行警告;测试方法:手工。表6-1注册功能模块测试用例序号输入预期结果实际结果测试结果1正确输入注册信息并点击注册按钮跳转回登录界面正确跳转回登录界面通过2不完全输入或错误输入注册信息并点击注册按钮不予以跳转并提示相关信息正确显示提示信息并不予以跳转界面通过(2)登录功能模块测试:登录功能模块测试主要是检测当选择一种身份正确输入账号密码时能否跳转入对应界面,或错误输入账号密码时能否正确提示“未找到对应用户”。测试用例如表6-2所示:目的:检测点击事件的处理操作能否正确执行;测试方法:手工。表6-2登录功能模块测试用例序号输入预期结果实际结果测试结果1分别选择老师/学生身份并正确输入账号密码并点击登录跳转入点名系统老师界面正确跳转入点名系统老师界面通过2分别选择老师/学生身份并错误输入账号密码并点击登录不予以界面跳转并显示提示信息正确显示提示信息并不予以跳转通过(3)签到管理功能模块测试:签到管理功能模块测试主要是检测能否对生成的签到科目进行成功的删除或者添加操作。经过添加多个签到科目并在目录界面进行删除,发现能够完成签到科目的添加删除操作,故该模块可正常运行,通过测试。(4)作业管理功能模块测试:作业管理功能模块测试主要是检测是否能在完整输入信息后点击发布按钮进行页面跳转回作业目录并提示“发布成功”信息,且在不完全输入信息后能否提示“请完善所有信息”。测试用例如表6-3所示:目的:检测点击事件的处理界面是否正确跳转,是否对行为进行警告;测试方法:手工。

表6-3作业管理功能模块测试用例序号输入预期结果实际结果测试结果1完整输入信息并点击发布跳转入作业信息目录界面并提示正确提示信息并跳转入作业信息目录界面通过2不完全输入信息并点击发布不予以跳转并提示信息正确提示信息并不予以跳转通过3点击删除按钮相关作业信息消失正确删除作业信息通过(5)学生管理功能模块测试:学生管理功能模块测试主要是检测是否能正确对学生进行增删。并且在正确完善信息和不完善信息进行注册时予以提示信息。测试用例如表6-4所示:目的:检测点击事件的处理界面是否正确跳转,检测点击事件的处理操作能否正确执行,是否对行为进行警告;测试方法:手工。表6-4学生管理功能模块测试用例序号输入预期结果实际结果测试结果1完整输入学生信息点击添加返回学生目录信息界面并提示正确提示信息并返回界面通过2不完全输入学生信息点击添加不予以跳转并提示正确提示信息并不予以跳转通过3点击删除按钮学生信息在目录界面消失正确删除学生信息通过(6)请假管理功能模块测试:请假管理功能模块测试主要是检测是否能正确显示学生请假信息,并进行删除操作。经过发布多个请假信息,发现系统能够正确显示请假信息并且进行删除操作,故该模块可以正常运行,通过测试。(7)学生签到功能模块测试:学生签到功能模块测试主要是检测是否能对学生在围栏内/外进行的点击操作进行相应提示。经过设置2个不同的签到围栏范围,发现系统能够正确的对学生在围栏内/外签到行为分别提示“签到成功”和“您还没进入签到范围”信息,故该模块可以正常运行,通过测试。(8)查看作业功能模块测试:查看

温馨提示

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

评论

0/150

提交评论