配色: 字号:
安卓课程设计
2020-08-13 | 阅:  转:  |  分享 
  




《物联网移动应用开发》课程设计报告



设计题目:一个工具箱

专业:物联网工程

指导教师:王卓、苏靖枫、杨斌

学号:

姓名:

同组人员:















计算机与数据科学学院

2019年6月14日

目录



1课设介绍 1

1.1 课设题目 1

1.2 课设背景 1

1.3 课设目的 1

2设计原理及方案 2

2.1使用的软件及环境 2

2.2需求分析与概要设计 2

2.2.1需求分析 2

2.2.2日程表设计思路 2

2.2.3应用流量监控设计思路 3

3系统功能分析 5

3.1APP整体流程分析 5

3.2功能模块设计 5

3.2.1开始界面模块 5

3.2.2日程表模块 6

3.2.3应用流量监控模块 6

3.3四大组件 7

3.3.1Activity 7

3.3.2BroadcastReceiver 7

3.3.3Service 8

3.3.4ContentObserver 8

4程序实现及代码分析 10

4.1用户主界面 10

4.2日程提醒 11

4.3短信观察 12

4.4流量的圆弧动画显示 15

4.5TrafficService 16

4.6广播Broadcast 18

总结 20

参考文献 21

1课设介绍



课设题目

一个工具箱:包含两个小工具,分别是:日程表,应用流量监控。



课设背景

Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区大多数人使用“安卓"或“安致”。Android操作系统最初由AndyRubin开发,主要用于支持手机。截止到2016年4月的前三个月数据统计,Android系统的全球市场份额已经达到了76%,在美国市场该期间内的份额为67.6%,在中国大陆城市地区该期间内的市场份额为78.8%。目前Android的主要竞争对手是Apple的IOS。

随着移动通信与Internet向移动终端的普及,网络和用户对移动终端的要求越来越高,而Symbian,Windows?Mobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开发性很强的平台。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android。??

Android是一套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android是由Linux+Java构成的开源软件,允许所有厂商和个人在其基础上进行开发。Android平台的开放性等特点既能促进技术(包括平台本身)的创新,又有助于降低开发成本,还可以是运营商能非常方便地制定自己的特色化的产品。因此,它具有很大的市场发展潜力。



课设目的

本设计是在学习Android平台软件开发的课程的基础上进行的一次综合实践。通过本课程设计,让我们巩固有关Android平台软件开发的知识。







2设计原理及方案

2.1使用的软件及环境

AndroidStudio——开发软件:AndroidStudio是一个Android开发环境,类似EclipseADT,AndroidStudio提供了集成的Android开发工具用于开发和调试。

表2.1开发环境

开发环境 产品环境 操作系统 Windows10 Windows10 开发工具 AndroidStudio 数据库 SQLite SQLite

2.2需求分析与概要设计

2.2.1需求分析

日程表不但支持基本的日历信息展示,而且支持用户设定每天的日程安排,还支持日程提醒时间 另一个项目——流量监控,该项目采用多种自定义控件的相关技术,并同时运用多种存储技术。列表视图ListView:每页日历包含7天(一周的日期),采用了ListView。?基本适配器BaseAdapter:列表项要展示当天的公历日、农历日、节日与节气,还要展示当天的日程安排标题,需要适配器配合。翻页视图ViewPager:每页一周,一年52周,支持左右滑动,用到了ViewPager。?选项卡标题栏PagerTabStrip:日历上方每周的周数标题对应PagerTabStrip。?广播Broadcast:每页根据当周的节日设置背景图,如国庆节所在周显示华表背景,中秋节所在周显示圆月背景,当周无节日显示晴天背景。由Fragment通知Activity变更背景,上一节讲过可用广播技术,Fragment发送广播,Activity接收广播。?时间选择对话框TimePickerDialog:设置日程安排要选择日程时间,即时间选择对话框。?定时器AlarmManager:设置日程提醒时间,一般要指定提前若干分钟,这个定时任务就靠AlarmManager。?另外,还包括其他已经学过的控件知识,如TextView、Button、EditText、Spinner、SQLite等。如同电脑上的杀毒软件,手机上也有形形色色的安全App,比如安全管家、安全卫士、安全助手等,这些安全App都有一个核心模块——流量监控功能。现在运营商都靠流量赚钱,比如100M流量要10元钱、1G流量要100元,很多App一打开就是满屏图片,非常费流量,而且有的App会偷跑流量,很多用户不知不觉电话费就被流量花光了所以流量监控的功能很实用3系统功能分析

3.1APP整体流程分析



图3.1程序流程图



3.2功能模块设计

3.2.1开始界面模块3.2.2日程表模块

(1)ScheduleActivity.java:这是日程表的主页面入口,内含展示每周日程的翻页视图ViewPager、展示月份标题的选项卡标题栏PagerTabStrip。以及一个节日图片的广播接收器FestivalControlReceiver,一旦接收到Fragment发来的节日图片广播,就更换当前页面的背景图片。

(2)SchedulePagerAdapter.java:一年包括52个星期,所以ViewPager一共有52页,它与具体月份页之间通过SchedulePagerAdapter关联起来。

(3)ScheduleFragment.java:这是某个星期的日程安排,以碎片Fragment的形式加入到翻页适配器中。内含一个ListView列表视图,通过校验这个星期是否存在特殊节日,来决定要将页面背景更换成哪张图片。

(4)ScheduleListAdapter.java:每页的日程列表一共7行,囊括了当周从星期一到星期日的所有日程安排。当周与其下的日期之间通过ScheduleListAdapter关联起来,具体的日程信息可使用一个文本视图TextView来表达。

(5)ScheduleDetailActivity.java:点击列表中的某一行,即可跳转至日程详情页面。在该详情页可以查看、编辑当天的日程信息,还可以设定日程的提醒闹钟。

3.2.3应用流量监控模块 (1)MobileAssistantActivity.java:这个是手机安全助手的主页面,上半部分展示当月和当天的流量总体使用情况,下半部分展示每个应用的流量消耗明细数据。如果已使用流量超出两倍限额,则展示红色圆弧进度;如果已使用流量超出一倍限额,则展示橙色圆弧进度;如果已使用流量未超出限额,则展示绿色圆弧进度。?

(2)MobileConfigActivity.java:点击主页面右上角的三点菜单图标,则跳转到流量限额配置页面。该配置页面既支持手工填写月流量限额、日流量限额,也支持由App自动校准流量限额数值。所谓的自动校准,即是先由手机自动发送流量查询短信给运营商的客服号,等待运营商客服号下发流量校准短信,然后App通过解析短信内容获得并保存详细的流量配额数据。?(3)TrafficService.java:为了方便用户查看实时的流量消耗信息,就要把流量监控结果推送到通知栏,于是后台静默运行的流量服务便派上用场了。它每隔一段时间,自动获取最新的流量信息,并将最新的监控结果推送到前台,也就是实时刷新通知栏上面的流量消息。



3.3四大组件

3.3.1Activity

packagecom.example.custom存放着Activity页面的代码。

(1)ScheduleActivity.java:这是日程表的主页面入口,内含展示每周日程的翻页视图ViewPager、展示月份标题的选项卡标题栏PagerTabStrip。以及一个节日图片的广播接收器FestivalControlReceiver,一旦接收到Fragment发来的节日图片广播,就更换当前页面的背景图片。

(2)SchedulePagerAdapter.java:一年包括52个星期,所以ViewPager一共有52页,它与具体月份页之间通过SchedulePagerAdapter关联起来。

(3)ScheduleFragment.java:这是某个星期的日程安排,以碎片Fragment的形式加入到翻页适配器中。内含一个ListView列表视图,通过校验这个星期是否存在特殊节日,来决定要将页面背景更换成哪张图片。

(4)ScheduleListAdapter.java:每页的日程列表一共7行,囊括了当周从星期一到星期日的所有日程安排。当周与其下的日期之间通过ScheduleListAdapter关联起来,具体的日程信息可使用一个文本视图TextView来表达。

(5)ScheduleDetailActivity.java:点击列表中的某一行,即可跳转至日程详情页面。在该详情页可以查看、编辑当天的日程信息,还可以设定日程的提醒闹钟。

3.3.2BroadcastReceiver

Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Broadcast是Android系统中负责接收广播消息并对消息做出反应的组件。可以将BroadcastReceiver理解为广播接收者,用于接收程序所发出的承载各种各样广播消息的Intent,它在本质上相当于一个监听器,监听接收广播消息,然后再做出处理。广播消息既可以是系统发送,也可以由用户应用程序产生。[4]

多数的广播是系统发送的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。BroadcastReceiver没有用户界面,所以我们设计一个显示在状态栏的图标,这样用户就可以单击它打开看通知内容。当应用程序发送广播消息,并创建Intent对象后,可通过两种方式启动BroadeastRecevicer,即通过sendBroadcast()方法启动和通过sendOrderedBroadcast()方法启动。这两者的区别就是前者是发送一个普通的广播后者是发送个有序的广播。BroadcastReceiver在Android应用程序中,与其他三大组件Activity、Service和ContentPorvider一样,是一段独立的Java程序代码存在于应用程序项目中,如果要在程序中能够启动和运行,必须要在Android项目中注册。

广播Broadcast:在日程表中每页根据当周的节日设置背景图,如国庆节所在周显示华表背景,中秋节所在周显示圆月背景,当所在周无节日则显示晴天背景。由Fragment通知Activity变更背景,可用广播技术,Fragment发送广播,Activity接收广播

3.3.3Service

Service是Android的四大组件之一,用于支持Android系统的服务。Service是个能够在后台执行长时间运行的操作应用程序组件,不提供用户界面。Android的其他应用的组件可以在后台启动一个Service运行,即使用户切换到另一个应用,此Service也会继续运行。Android服务组件就像是Windows系统服务或者UNIX的守护进程,这些都是在后台运行而不可见。Service不能与用户交互,也不能自己启动,需要调用Context,startService()或bindService()来启动,在后台运行。当应用程序需要进行某种不在前台显示的计算或数据处理时,就可以启动一个Service来完成,每个Service都继承自android.app包下的Service类。每个Service都必须在AndroidManifest.xml中通过进行声明。Service具有自己的生命周期。Service服务的生命周期是与Activity生命周期分离的,当Activity被暂停、停止或者销毁时,Service组件还可以继续处理其他任务。例如,一个服务可以处理网络事务、播放音乐、执行文件I/O或者跟内容提供器交互,所有这些都是在后台完成的。

服务Service:流量数据每间隔一段时间就得重新获取,这种定时处理无法在Acitivity页面进行,只能在服务Service中处理。[1]

3.3.4ContentObserver

ContentResolver获取数据采用的是主动查询方式,给目标内容注册了一个观察器,一旦目标内容的数据发生变化,观察器规定好的动作马上触发,从而执行预先定义的代码。?内容观察器的用法与内容提供器类似,也要从ContentObserver派生一个观察器类,然后通过ContentResolver对象调用相应的方法注册或注销观察器。下面是ContentResolver与观察器有关的方法说明。registerContentObserver:注册内容观察器。unregisterContentObserver:注销内容观察器。notifyChange:通知内容观察器发生了数据变化。?

4程序实现及代码分析

4.1用户主界面

通过按钮实现从过度界面和用户主界面之间的跳转,显示效果如下图4.1所示。





图4.1主界面示意图

跳转代码如下:

protectedvoidonCreate(BundlesavedInstanceState){//savedInstanceState保存Activity生命周期super.onCreate(savedInstanceState);//onCreate被系统调用setContentView(R.layout.activity_main);Buttonbtn=findViewById(R.id.btn);//定位函数,主要是引用.R文件里的引用名。btn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Intentit=newIntent(MainActivity.this,MainActivity2.class);MainActivity.this.startActivity(it);}});





4.2日程提醒

根据用户所自定义的事件设置日程提醒时间,在指定的时间点进行提醒,采用手机震动的方式。振动器的对象从系统服务VIBRATOR_SERVICE中获取。



图4.2日程提醒

震动器的主要方法如下:

(1)hasVibrator:判断设备是否拥有震动器。

(2)vibrate:震动手机。可设定单次震动的时长、多次震动的时长、是否重复震动等。

(3)cancel:取消震动。

使用震动器要在AndroidManifest.xml中加上如下权限:????????????

控制手机震动的代码手机号码的每月流量限额一般由用户手动配置,但流量限额其实是由移动运营商指定的。以中国移动为例,只要发送流量校准短信给运营商客服号码(如发送18到10086),运营商就会给用户发送本月的流量数据,包括月流量额度、已使用流量、未使用流量等信息。手机App只需监控10086发送的短信内容,即可自动获取手机号码的月流量额度,无须用户手工配置。

日流量的圆弧动画,超出两倍限额,展示红色圆弧进度,超出一倍限额,展示橙色圆弧进度,没有超出限额,展示绿色圆弧进度privatevoidshowDayAnimation(){rl_day.removeAllViews();intdiameter=Math.min(rl_day.getWidth(),rl_day.getHeight())-line_width2;Stringdesc="今日已用流量"+StringUtil.formatData(traffic_day);//创建日流量的圆弧动画CircleAnimationdayAnimation=newCircleAnimation(MobileAssistantActivity.this);//设置日流量动画的四周边界dayAnimation.setRect((rl_day.getWidth()-diameter)/2+line_width,(rl_day.getHeight()-diameter)/2+line_width,(rl_day.getWidth()+diameter)/2-line_width,(rl_day.getHeight()+diameter)/2-line_width);floattrafficM=traffic_day/1024.0f/1024.0f;if(trafficM>limit_day2){//超出两倍限额,则展示红色圆弧进度intend_angle=(int)((trafficM>limit_day3)?360:(trafficM-limit_day2)360/limit_day);dayAnimation.setAngle(0,end_angle);dayAnimation.setFront(Color.RED,line_width,Style.STROKE);desc=String.format("%s\n超出限额%s",desc,StringUtil.formatData(traffic_day-limit_day10241024));}elseif(trafficM>limit_day){//超出一倍限额,则展示橙色圆弧进度intend_angle=(int)((trafficM>limit_day2)?360:(trafficM-limit_day)360/limit_day);dayAnimation.setAngle(0,end_angle);dayAnimation.setFront(0xffff9900,line_width,Style.STROKE);desc=String.format("%s\n超出限额%s",desc,StringUtil.formatData(traffic_day-limit_day10241024));}else{//未超出限额,则展示绿色圆弧进度intend_angle=(int)(trafficM360/limit_day);dayAnimation.setAngle(0,end_angle);dayAnimation.setFront(Color.GREEN,line_width,Style.STROKE);desc=String.format("%s\n剩余流量%s",desc,StringUtil.formatData(limit_day10241024-traffic_day));}rl_day.addView(dayAnimation);//渲染日流量的圆弧动画dayAnimation.render();tv_day_traffic.setText(desc);}

4.5TrafficService

获取当前应用实例,从共享参数中获取限额熟知,并启动刷新任务刷新任务:更新流量数据库,刷新流量通知栏,延迟10秒再次启动流量刷新任务更新数据库:获取最新的应用队列,和应用最新的流量接收数据,后在流量数据库中插入最新的流量记录刷新流量通知栏:refreshNotify查询数据库获取昨日和今日的应用流量,然后截止到今日的应用流量减去截止到昨日的应用流量,二者之差便是今日的流量数据根据布局文件生成远程视图对象,并显示流量文字描述和视图内部的进度条属性,以及和活动界面之间的跳转(使用Intent跳转)TrafficService部分代码如下publicintonStartCommand(Intentintent,intflags,intstartid){//获取当前应用的唯一实例app=MainApplication.getInstance();//从共享参数中获取日限额数值limit_day=SharedUtil.getIntance(this).readInt("limit_day",50);//立即启动流量刷新任务mHandler.post(mRefresh);returnSTART_STICKY;}

privateHandlermHandler=newHandler();//声明一个处理器对象//定义一个流量刷新任务privateRunnablemRefresh=newRunnable(){@Overridepublicvoidrun(){//更新流量数据库refreshData();//刷新流量通知栏refreshNotify();//延迟10秒后再次启动流量刷新任务mHandler.postDelayed(this,10000);}};



privatevoidrefreshNotify(){StringlastDate=DateUtil.getAddDate(""+mNowDay,-1);//查询数据库获得截止到昨日的应用流量ArrayListlastArray=app.mTrafficHelper.query("day="+lastDate);//查询数据库获得截止到今日的应用流量ArrayListthisArray=app.mTrafficHelper.query("day="+mNowDay);longtraffic_day=0;//截止到今日的应用流量减去截止到昨日的应用流量,二者之差便是今日的流量数据for(inti=0;ilimit_day2){//超出两倍限额,则展示红色进度条progress=(int)((trafficM>limit_day3)?100:(trafficM-limit_day2)100/limit_day);layoutId=R.layout.notify_traffic_red;}elseif(trafficM>limit_day){//超出一倍限额,则展示橙色进度条progress=(int)((trafficM>limit_day2)?100:(trafficM-limit_day)100/limit_day);layoutId=R.layout.notify_traffic_yellow;}else{//未超出限额,则展示绿色进度条progress=(int)(trafficM100/limit_day);}Log.d(TAG,"progress="+progress);//显示流量通知showFlowNotify(layoutId,desc,progress);}



4.6广播Broadcast每页根据当周的节日设置背景图,如国庆节所在周显示华表背景,中秋节所在周显示圆月背景,当周无节日显示晴天背景。由Fragment通知Activity变更背景,上一节讲过可用广播技术,Fragment发送广播,Activity接收广播。

对于这两周的课程设计,我的感受是不太简单,为什么这么说呢?相关的书籍法

[1]李刚.疯狂Android讲义(第三版).北京:电子工业出版社.2015.

[2]丁伟雄.宋晓光.李伟平.Android程序设计与应用.北京:清华大学出版社.2014.

[3]毋建军.徐振东.林瀚.Android应用开发案例教程.北京:清华大学出版社.2013.

[4]雷擎.伊凡.基于Android平台的移动互联网应用开发.北京:清华大学出版社.2014.









网上书店的设计与实现



《物联网移动应用开发》课程设计报告目录



2















《物联网移动应用开发》课程设计报告第一章课设介绍



1



《物联网移动应用开发》课程设计报告第二章设计原理及方案



《物联网移动应用开发》课程设计报告第三章系统功能分析



《物联网移动应用开发》课程设计报告第四章程序实现及代码分析



《物联网移动应用开发》课程设计报告总结



《物联网移动应用开发》课程设计报告参考文献





成绩:

评语:







I







献花(0)
+1
(本文系摘摘摘丿丿...首藏)