admin 管理员组文章数量: 887021
2024年1月5日发(作者:python 分组)
西南科技大学本科生毕业论文 I
基于Android的WiFi文件传输系统的设计与实现
摘要:随着智能手机的普及,越来多的人会使用手机来分享文件。虽然目前应用市场上有很多文件分享的软件,但其传输的方式都存在一定的缺陷。本系统就是根据目前Android应用市场上各种文件传输软件的优缺点,使用WiFi直连和SOCKET通信来传输文件,解决了蓝牙传输速度慢,NFC传输数据小,网络传输需要流量或网络连接,WiFi热点传输时不能使用WiFi上网等问题。本系统包含了文件的搜索,管理,删除,文件/消息传输等功能。最多支持9个文件同时发送,在连接设备后,可以浏览对方设备的文件目录。
本文首先介绍了选题背景和现状,然后详细阐述了系统中使用的关键技术的发展和相关知识。通过对系统的运行测试得出可以发现:系统运行流畅,多文件传输稳定,传输速度也很快,满足用户需求,具有一定的商业价值及较强的使用推广价值。
关键词:WiFi直连;SOCKET通信;文件搜索
西南科技大学本科生毕业论文 II
Design and Implementation of WiFi-Direct File
Transfer System on Android Platform
With the popularity of smart phones, more and more people will use mobile
Abstract:phones to share files, although there are a lot of documents on the market share of the
software,but the way they are transferred to determine the existence of a certain. This
system is designed to the advantages and disadvantages of the Android Market on a
variety of file transfer software, using WiFi-Direct connection and socket
communication to achieve the file transmission to solve the Bluetooth transmission
speed is slow, small NFC data transmission, the transmission network to network
traffic or connection, WiFi hotspots transmission cannot use WiFi Internet access and
other issues. This application contains the file search, management, delete, file /
message transfer and other functions. Supports up to 9 files at the same time, in
connection with the device, you can browse the file directory of the other equipment.
This paper firstly introduces the background and current situation of the selected
topic, and then describes the development of key technologies and related knowledge
in detail. Through the operation test of the system obtained can be found: the
operation of the system is very stable smooth, multi document transmission is
relatively stable, transmission speed is faster, basically meet the needs of users, has a
commercial value and good popularization and use value.
KeyWords:
Wifi-Direct, socket communication, high-speed transmission
西南科技大学本科生毕业论文 III
目 录
第1章 绪 论................................................................................................................ 1
1.1引言................................................................................................................... 1
1.2选题的目的及意义........................................................................................... 1
1.3国内外相关研究............................................................................................... 1
第2章 系统需求分析.................................................................................................. 4
2.1 应用需求概述.................................................................................................. 4
2.2 用户类与特征.................................................................................................. 4
2.3 系统功能性需求分析...................................................................................... 4
2.4 系统非功能性需求.......................................................................................... 5
第3章 系统概要设计.................................................................................................. 7
3.1 应用模块划分及模块功能介绍...................................................................... 7
3.2 应用的数据存储.............................................................................................. 8
3.3 数据库设计...................................................................................................... 9
3.3.1 Android数据库介绍 .............................................................................. 9
3.3.2本系统数据库设计................................................................................. 9
3.4 Android开发相关技术介绍 .......................................................................... 10
3.4.1 Android的发展历史 ............................................................................ 10
3.4.2 Android系统结构介绍 ........................................................................ 11
3.4.3 Android四大组件 ................................................................................ 12
第4章 系统详细设计及实现.................................................................................... 15
4.1 开发工具和软件平台.................................................................................... 15
4.2 传输记录模块................................................................................................ 15
4.2.1 查看传输记录...................................................................................... 17
4.3 数据库操作模块............................................................................................ 18
4.4 文件管理模块................................................................................................ 19
4.4.1 选择要发送的文件.............................................................................. 21
4.4.2 移除要发送的文件.............................................................................. 22
4.4.3 查看文件属性...................................................................................... 23
4.4.4 打开音乐,视频等文件...................................................................... 24
西南科技大学本科生毕业论文 IV
4.4.5 遍历手机文件...................................................................................... 26
4.5 设备连接管理模块........................................................................................ 27
4.5.1 连接其他设备...................................................................................... 28
4.5.2 重命名本机设备.................................................................................. 30
4.6 文件/数据传输模块 ...................................................................................... 31
4.6.1 设置同时发送文件最大个数.............................................................. 33
4.6.2 发送文件.............................................................................................. 34
4.6.3 文件/数据传输性能 ............................................................................ 35
4.7 应用UI设计 ................................................................................................. 36
4.7.1应用界面框架结构设计....................................................................... 36
4.7.2主界面的设计....................................................................................... 37
4.7.3 UI控件的使用 ..................................................................................... 37
第5章 系统测试........................................................................................................ 39
5.1测试环境......................................................................................................... 39
5.2模块功能测试................................................................................................. 39
5.2.1 设置同时传输文件最大个数功能测试.............................................. 39
5.2.2 重命名本机设备功能测试.................................................................. 40
5.2.3 选择要发送的文件功能测试.............................................................. 41
5.2.4 移除要发送的文件功能测试.............................................................. 42
5.2.5 发送文件功能测试.............................................................................. 43
5.2.6 查看传输记录功能测试...................................................................... 44
5.2.7 打开本机音乐,视频等文件功能测试.............................................. 45
5.2.8 查看文件属性功能测试...................................................................... 46
5.2.9 连接设备功能测试.............................................................................. 48
5.3非功能性测试................................................................................................. 48
5.3.1 连文件传输性能测试.......................................................................... 48
5.3.2 系统兼容性测试.................................................................................. 49
结 论............................................................................................................................ 51
致 谢............................................................................................................................ 52
参考文献...................................................................................................................... 53
西南科技大学本科生毕业论文
第1章 绪 论
1.1引言
随着近几年移动行业的飞速发展,手机已进入智能时代。现在的手机智能平台主要包括Android,IOS,Win10移动版,而用户最多的还是Andorid和IOS平台,所以熟悉这些智能平台的应用开发是必须的。在日常生活中,朋友之间经常会分享手机中的一些新鲜的,好玩的,有趣的事情,但是目前的手机端分享方式都存在一些弊端。如常见的网络分享,这必须要求用户双方都连接互联网,条件比较苛刻。而蓝牙分享虽然不需要联网,但是传输速度比较慢。针对传输速度慢的问题,想到了WiFi热点传输,的确这个传输速度明显快于蓝牙,但是利用WiFi热点传输时又有一个问题来了,如果要在这时用WiFi上网呢,这就办不到了。针对各种分享方式的弊端,需要找到一种新的分享来解决这些问题。而新的Wifi直连技术,则能很好地解决上面的那些弊端,具有不需联网,传输速度快,传输文件的时候还能WiFi上网的优点。如今的Android手机中,进入WiFi高级设置里面就可以看到有WiFiDirect(WiFi直连)这个东西,但是官方并没有开发对应的app来传输文件,而系统已经对WiFi直连这个技术进行了支持,并封装了相应的api给开发者使用。
1.2选题的目的及意义
根据目前Android手机平台的各种分享方式的弊端,找到一种新的分享文件的方式,从而解决NFC传输的数据小,蓝牙分享速度慢,网络分享需联网,WiFi热点分享时不能用WiFi上网的问题。本应用就是利用WiFi直连技术,来解决目前的一些文件分享方式存在的弊端,从而让Android智能手机用户能够更高效方便的分享文件。实现在高速分享文件的同时利用WiFi高速上网。
1.3国内外相关研究
2010年10月,Wi-Fi Alliance(wi-fi联盟)发布Wi-Fi Direct白皮书,白皮书中介绍了有关于这种技术的基本信息、这种技术的特点和这种技术的功能,Wi-Fi
Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互连接。与蓝牙技术类似,这种标准允许无线设备以点对点形式互连,而且在传输速度与传输距离方面则比蓝牙有大幅提升[1]。
按照定义,Wi-Fi CERTIFIEDWi-Fi Direct设备是支持对等连接的设备,这种
1
西南科技大学本科生毕业论文
设备既支持基础设施网络,也支持P2P连接。Wi-Fi Direct设备能够作为典型的站点(STA)加入基础设施网络,而且必须支持Wi-Fi Protected Setup加入者功能。
Wi-Fi Direct设备通过组建小组(以一对一或一对多的拓扑形式)来建立连接,小组的工作形式与基础设施BSS类似。由一部Wi-Fi Direct设备负责整个小组,包括控制哪部设备加入、小组何时启动和终止等。这种设备对于传统客户设备而言就是一部接入点,能够提供基础设施接入点所提供的部分服务[2]。
最初,Wi-Fi Alliance®联盟的这一新标准原名为“Wi-Fi peer-to-peer”,而最终定名为WiFiDirect,面向各种Wi-Fi设备,从电脑到手机、到电脑外设,到家电等等。符合该标准的设备无需热点和路由器,就可以方便的和其他设备实现直接连接,传输数据或共享应用。Wi-Fi Direct可以支持一对一直连,也可以实现多台设备同时连接,并且Wi-Fi Direct标准将会支持所有的Wi-Fi设备,从11a/b/g至11n,不同标准的Wi-Fi设备之间也可以直接互联。由于WiFiDirect支持设备间的直接连接,所以又称为WiFiP2p。P2P架构中定义了三个组件, 笔者将其称为“ 一个设备, 两种角色” , 分别如下。
· P2P Device: 它是P2P架构中角色的实体, 可把它当做一个WiFi设备。
· P2P Group Owner: Group Owner( GO) 是一种角色, 其作用类似于
Infrastructure BSS中的AP。
· P2P Client: 另外一种角色, 其作用类似于Infrastructure BSS中的STA。
实际上, P2P技术模仿了Infrastructure BSS网络结构。 在组建P2P Group( 即P2P Network) 之前, 智能终端都是一个一个的P2P Device。 当这些P2P Device设备之间完成P2P协商后, 其中将有一个并且只能有一个Device来扮演GO的角色( 即充当AP),而其他Device来扮演Client的角色。
P2P设备之间想要互相发现对方,则需要P2P Discovery的支持.
P2P Discovery的作用很简单, 就是使多个P2P Device能够互相发现并构建一个Group。 根据规范, 它包括四个主要技术子项。
· Device Discovery: 用于P2P设备搜索周围其他支持P2P的设备。
· Service Discovery: 该Device Discovery基础上, P2P还支持搜索指定的服务。 这部分功能属于可选项, 笔者觉得它和2.2.5节中提到的Bonjour类似。
· Group Formation: 用于决定两个P2P Device谁来扮演GO, 谁来扮演Client。
· P2P Invitation: 用于激活一个Persistent Group,或者用于邀请一个Client
2
西南科技大学本科生毕业论文
加入一个当前已存在的Group。
3
西南科技大学本科生毕业论文
第2章 系统需求分析
2.1 应用需求概述
根据本应用的目标可以列出这些需求:
1) 能够选择要发送的文件,也能移除不想发的文件
2) 能够发送文件(核心需求,要能成功发送/接受文件)
3) 简单的文件管理(浏览,删除文件等)
4) 重命名本机设备(基本需求,方面手机在传文件时能够分辨设备)
5) 查看文件传输记录(核心需求,记录接受/发送了哪些文件)
6) 查看正在传输的文件状态(核心需求)
系统功能结构如图2-1所示。
图2-1 应用功能结构图
2.2 用户类与特征
APP用户:此类用户主要是使用应用来分享文件,并且实时查看传输记录,也可以查看传输的历史记录。同时亦可以使用应用来对本机设备进行简单的管理,如重命名本机设备,查看本机设备上的一些文件属性等等,还是可以预览该文件。
2.3 系统功能性需求分析
根据对市场上其它分享应用的调查和分析,可以列出应用程序的功能用例,
4
西南科技大学本科生毕业论文
系统用例图如图2-2所示:
设置同时发送文件最大个数重命名本机设备选择要发送的文件移除要发送的文件发送选择的文件普通用户查看传输记录打开音乐,视频等文件查看文件属性连接其他设备遍历手机上的文件
图2-2 系统用例图
2.4 系统非功能性需求
开作为一款实用的分享程序,除了基本的功能之外,应用还应该满足一些非
5
西南科技大学本科生毕业论文
功能性的需求:如界面的美观,界面使用的流畅度,用户点击相应速度,对不同版本的Android系统的兼容性,以及应用的稳定性等等。
界面的美观及使用流畅度:界面应该符合大众的审美观,而且具有一点的特色。界面之间切换应该平滑流畅,不应该出现明显的卡顿感。
用户点击的相应速度:为了保证良好的用户体验,应用对用户的点击或长按等一系列操作的相应速度不应该超过1s。
对不同的Android系统的兼容性:应该尽可能的兼容主流的各个版本的系统,更具目前的手机市场上Android系统的情况,本应用应该兼容4.4及以上的Android系统。
稳定性:用户正常的操作中,系统能够正常运行。
文件传输速度:在正常距离范围类,传输平均总速度应大于3M/S。
多任务传输:系统应支持多个传输任务同时进行,但是为了避免同时传输任务过多而引起的系统性能降低,系统应该对同时传输的任务个数有限制。
系统界面的加载:由于应用中涉及到应用图标,图片、电影、音乐等文件的缩略图的获取及显示,为了提升系统的流畅度,系统应采用图片等耗时资源的异步加载技术。
6
西南科技大学本科生毕业论文
第3章 系统概要设计
3.1 应用模块划分及模块功能介绍
根据需求分析,可以划分出5个模块:
1) 传输记录管理模块
2) 数据库操作模块
3) 设备连接管理模块
4) 文件/数据传输模块
5) 文件管理模块。
每个模块都具有独立的完整的功能,模块之间又具有一定的的联系,所有的模块中,文件的传输模块是核心,它与其他的几个模块都存在之间或者间接的关系。模块之间的关系如图3-1所示:
图3-1 系统各模块关系图
各个模块又包含了许多具体的功能:
1) 传输模块记录:记录的管理。
2) 数据库操作模块:保存记录到数据库,读取数据库中的记录,更新数据库中的记录。
7
西南科技大学本科生毕业论文
3) 设备连接管理模块:搜索设备,连接设备,断开设备连接,修改本机名。
4) 文件/数据传输模块:发送文件/数据,接收文件/数据,从对方设备下载文件,自定义文件发送个数。
5) 文件管理模块:选择要发送的文件,移除要发送的文件,浏览本机文件,浏览对方设备文件目录(需先连接设备)打开文件,查看文件属性。
如果不区分模块,而只看功能,系统功能结构图如图3-2所示:
图3-2应用功能结构图
3.2 应用的数据存储
中介软件是android操作系统应用程序的桥梁,主要分为函数和虚拟机。
函数就是AndoridSDK中的一系列接口,应用开发会经常用到这些接口方法。Android的数据存储采用sqlite数据库系统和文件存储,用户可以用ContentProvider类获取数据[3]。android中数据存储技术主要有:文件存储、Sharedpreference、sqlite、ContentProvider和网络存储,在本软件中主要使用到了文件存储和Sharedpreference和sqlite存储。文件存储是以流的形式读写文件,可以以文格的格式,也可以以二进制的形式,在java语言中要使用流,则写入文件的对象必须进行序列化,sqlite是嵌入式移动设备中常用的轻量级数据库[4]。
因为程序运行时,保存在内存中的数据是暂存的,当应用程序退出后,保存这些数据的内存会被系统回收,清除,所以,需要把一些中要的数据输出到文件,或者保存到数据库,或网络[5]。
8
西南科技大学本科生毕业论文
3.3 数据库设计
3.3.1 Android数据库介绍
Android使用开源的、与操作系统无关的数据库—SQLite[6]。其优点如下:
轻量级:SQLite和CS模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。
独立性:SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。
隔离性:SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。
跨平台:SQLite数据库支持大部分操作系统,除了在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。
多语言接口:SQLite数据库支持很多语言编程接口,比如CC++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。
安全性:SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
3.3.2本系统数据库设计
命名规则:
表名:应用名_表记录的内容名(如传输记录表名:wifi_direct_records)
字段名:字段意义的英文_(如名字:name_)
本系统只需要建一张表即可,来保存传输记录,每一行就是一条记录。Records记录表字段结构如图3-3所示。
图3-3 Records表结构
9
西南科技大学本科生毕业论文
各个字段的含义如表3-1所示:
表3-1 Records表字段含义
字段名 id_ name_ path_ length_ state_ transfer_lenght_ transfer_mac_
字段类型
字段意思
Int string string string string string string
记录id
文件名
文件路径
文件长度
传输的状态
已传长度 对方设备的地址
由于只有一张表,所以数据库的设计比较简单。
3.4 Android开发相关技术介绍
3.4.1 Android的发展历史
Android 系统最开始是由2003在美洲加州成立的一家公司所开发,2005年,google发现了这款操作系统并且预估其前景极好顾收购注资了该公司,并且加速了Android系统的研发。2008年9月23日,google官方发布了Android1.0。但是1.0的系统还不支持触摸操作。2009年4月30日,Android1.6发布,并且创新型的支持了CDMA制式的网络,也就是说可以支持中国电信了。在Android1.6版本发布之后不久,google发布了Android2.0,这个版本后来被视为Android系统发展史上的里程碑。2010年,Android2.2发布。同年,Android2.3发布,最大的优点就是支持NFC(近场通讯协议,是发展快捷支付消费的方向)。2011年Android4.0发布,开启了Android4.x系统的神话级的飞跃,Android系统的使用量急剧增长。现如今,很多老一点的手机都是基于Android4.x的系统。2014年,Android5.0发布,代号L,改变了Android系统的UI风格,新增了许多炫酷的动画效果,启用了老式的DALVIK虚拟器而采用ART虚拟机,系统流畅度明显提升。2015年,google继续发力,将Android的版本提升到了6.0,系统原生支持指纹功能,虽然其他的一些基于5.x的第三方系统(如小米MIUI,魅族FLYME等)也支持指纹识别,但是其接口不统一,第三方APP无法一次开发而在所以的系统中使用指纹功能,而需要针对不同的系统做适配,很麻烦,而在6.0系统中同意了API接口,第三方应用就可以很好的一次开发而在不同的定制系统中使用指纹功能,这是个很大的改进。Android7.0正式版目前尚未发布,但是由于Android6.0虽然已经发布一年了,但是现在的手机升级到6.0系统的只有少部分,
10
西南科技大学本科生毕业论文
原因是那些手机的OEM厂商没有做相应的升级适配,鉴于这种情况,google据说会从Android7.0开始逐渐收回系统的升级权限,即由google官方直接推送升级,而不在由OEM厂商来升级了,这对于广大的Android智能手机用户来说是个好消息,以后就不用苦苦等手机厂商来升级了[7]。
3.4.2 Android系统结构介绍
Android是基于Linux操作系统的一款开源的移动操作系统,也可以说Andorid就是Linux上的一个较为复杂的应用程序。Android主要应用与只能手机与平板行业,市场份额高,是全球最大的手机操作系统。
Android系统现在发布的版本稳定版本是6.0.1,代号为M。代号为N的7.0.1也在开发中。Android6.0原生加入了应用的权限管理,加入了指纹模块并提供给开发者相应的api,加入了新的省电模式有效的增加了手机的续航时间等等,相信7.0会加入更多令人激动的新功能。
Android系统可以分为4层,如图3-5所示,由上到下分别是应用层,应用框架层,底层的库,Linux内核。应用层很简单,就是所有的Android应用。应用框架层主要是给上层的应用封装一些API,供其使用。底层的一些库就是系统的一些必须的库了,包括动态连接库等等。Linux内核主要是集成了一些算法来管理硬件,包含了很多相关的算法,如磁盘调度算法等等[8]。
图3-5 Android系统结构分层图
11
西南科技大学本科生毕业论文
Android系统中由虚拟机来解释执行应用程序,而且每隔应用都由一个单独的虚拟机来执行,且每个应用对应底层Linux系统中的一个进程。这是Android进程间安全的一种机制。Android的虚拟机称为Dalvik,但从Android4.4开始,google官方推出了新的虚拟机Art,在4.4系统上,用户可以选择使用哪个虚拟机来执行应用程序,但是5.0.1系统开始,Android系统彻底放弃了Dalvik虚拟而选择了Art虚拟机[8]。原因是Art具有如下的优点:
1) 应用启动速度变快,体验更流程,触感反馈及时。
2) 更长的电池续航能力。
3) 支持更低的硬件。
4) 系统性能显著提升。
尽管ART虚拟机有一些有点,但是还是有一些缺点。学过java的人知道,java语言编译出来的是.class类型的中间码,而Android对其优化为.dex格式的中间码,这也是为什么Android需要虚拟机的原因,因为这些中间码必须专门的程序来翻译执行。但ART虚拟机与DALVIK虚拟机不同的是,ART虚拟机在应用安装的时候会将应用的那些中间码翻译为机器码并保存,而DALVIK则是边翻译边执行。所以ART相对与DALVIK启动应用程序的速度更快,运行应用程序更加流畅,但是安装时间也会更长,也更加暂用存贮空间。
3.4.3 Android四大组件
Android的四大组建包括:Activity,Service, BraodcastRecevier,ContentProvider。
Activity:通俗的将就是应用程序的界面,在Activity上面可以任意的摆放一些控件来达到想要的UI效果。在MVC编程思想中充当VIEW和CONTORLER的角色[9]。Activity的生命周期如图3-6所示:
在实际应用开发时,在Activity的几个重要生命周期函数里面做一 些必要的操作。例如,在onCreate()方法里面,通常会根据布局的xml 文件来生成布局,在onPause()中,经常会做一些暂停工作,如游戏开发中,会在onPause()方法中来暂停游戏。又如onDestory()方法在Activity销毁的时候调用,可以在这里做一些保存的工作。
Service:即服务,在后台默默的工作,没有界面不可见,如后台音乐播放等一般就是使用的Service。Activity与Service可以有不同的关系,如果Activity直接启动的Servcie,那么当这个Activity结束是,刚才启动的Service也会结束,
12
西南科技大学本科生毕业论文
但是如果Activity以绑定的方式启动Service,那么在Activity结束后,Servcie并不会对应结束[10]。
图3-6 Activity生命周期
BraodcastRecevier:广播接收器,用于接收广播,这是Android系统进程间通信的方法之一。广播分为系统广播和自定义广播,系统广播是系统发送的一些重要广播,如开机完成,电池电量改变等等一些系统活动都会发送广播。当然用户在应用程序也可以自定义发送一些广播,然后在另外的地方一用BraodcastRecevier来接收。
ContentProvider:这是应用程序间共享数据的有效途径。Android系统中的应用程序都运行在单独的虚拟机中,对应底层Linux系统中的一个单独进程,也
13
西南科技大学本科生毕业论文
就是说应用程序之间的数据是相互分开的,这也是Android系统中进程间安全的机制。但是,应用程序有时候就是想把数据给别的应用看,如系统中的联系人,就会把所有的联系人信息利用ContentProvider提供给其他应用程序,对应的,自己的应用程序也可以利用ContentProvider来读取手机上保存的联系人信息。ContentProvider的使用方法和数据库的读取方式是类似的。
14
西南科技大学本科生毕业论文
第4章 系统详细设计及实现
4.1 开发工具和软件平台
开发工具:Android Studio,Android的SDK管理器
软件运行平台:Android4.4及以上
4.2 传输记录模块
这个模块主要是负责管理文件传输的记录,包括新增记录,修改记录,保存记录到数据库,从数据读取等一些记录的基本操作。与数据库模块联系非常紧密。
程序中主要的文件:
1) ../src/provider/
2) ../src/provider/
Record时一个实体类,是记录信息的载体,每个实例就是一条记录。
将传输记录模块主要封装到了RecordManager类里面,由这个类提供接口供其他地方使用。其他地方如果想要改变传输记录都通过调用本类的一些方法来操作,而不用直接去操作数据库,操作简单方便,而且有效的降低了代码之间的耦合度。
由于记录管理者的特性,本例采用单例模式,并且在主Activity创建的时候初始化这个类的唯一的实例对象。
其构造方法如下:
public static RecordManager getInstance(Context context) {
if(manager == null) { //双重校验锁第一锁
synchronized () {
if(manager == null) { //双从校验锁第二锁
manager = new RecordManager(context); //从数据库中读取数据
(); //从数据库中读取记录
}
}
}
return manager;
}
15
西南科技大学本科生毕业论文
构造方法主要是做了2件事:
1) 实例化类的唯一对象(单例的体现)。
2) 从数据库中读取传输记录。
这里不得不提的是这里单例的写法,是采用双重校验锁。这样的写法即保证了类对象的唯一性,又保证了多线程同时访问时的冲突问题,是目前比较推荐的单例模式的写法之一[11]。
下面介绍RecordManager类里面比较重要的一些方法:
1) 更新数据库:
//更新数据库中的记录
private void updateDB(Record record) {
ContentResolver resolver = tentResolver();
ContentValues contentValues = new ContentValues();
//放入一行各列的值
(, ());//放入ID
(, e());//放入名字
(, h());//放入路径
(, gth());//放入文件大小
(ER_LENGTH,
nsported_len());//放入文件已传输大小
(, te());//放入任务当前状态
(ER_DIRECTION,
nsport_direction());//放入记录传输方向:发送/接收
(ER_MAC,
());//放入对方设备的MAC地址
}
更新数据库的方法也很简单,ContentValues表示一行数据的值,uri定位到哪一个,及对应一个Record,里用ContentResolover就可以很简单的更新数据库中对应行的值了。这里的uri在初始化读取数据库的时候会保存下来。
16
西南科技大学本科生毕业论文
2) 读取数据库:readDB()
//从数据库读取数据
private void readDB() {
ContentResolver resolver = tentResolver();
Cursor cursor = (//从数据库中查询出包含指定列的记录
T_URI,//数据库的URI
new String[]{
,
,
,
,
ER_LENGTH,
,
ER_DIRECTION,
ER_MAC}
}while (Next());
}
}
这个方法只有在RecordManager构造初始化读取数据库时调用,目的就是为了读取保存在数据库中的传输记录。
4.2.1 查看传输记录
查看传输记录是系统的关键性功能用例,方便用户查看传输记录。用例描述如表4-1所示。
表4-1查看传输记录用例描述
功能描述
查看发送/接收了哪些文件
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 点击“历史”或右滑进入“历史界面”
2) 点击“历史”界面中相应的分类,查看该分类的记录
可选操作流
17
西南科技大学本科生毕业论文
技术关键:RecordManager类负责管理传输记录,在退出程序时保存记录到数据库,进入程序时从数据库读取记录列表。历史界面从RecordManager里面读取记录列表并显示。
实际运行截图如图4-1所示。
图4-1查看传输记录截图
4.3 数据库操作模块
这个模块的作用顾名思义就是对Android的SQLite数据库进行操作,包括表的创建,表内数据的增删改查等等一系列数据库操作。程序中的主要文件:
1) ..src/provider/
2) ..src/provider/
3) ..src/
先从简单的说起,里面就只是定义了一些常量,包括:数据库文件的名字,数据库表的字段,以及一些字段可能的值。
public static final String CONTENT_URI_STR = "content://" + AUTHORITY + "/wifi_direct";
public static final Uri CONTENT_URI = ("content://" + AUTHORITY + "/wifi_direct");
public static final String ID = "_id";//记录ID
public static final String NAME = "_name";//记录名
18
西南科技大学本科生毕业论文
public static final String PATH = "_path";//文件路径
public static final String LENGTH = "_length";//文件大小
public static final String TRANSFER_LENGTH = "_tlength";//已发送的文件大小
public static final String STATE = "_state";//记录当前的状态
public static final String TRANSFER_DIRECTION = "_direction";//记录是发送/接收文件
public static final String TRANSFER_MAC = "_mac";//对方设备的MAC地址
上面的有些字段本来是用来实现断点续传功能的(如TRANSFER_MAC,TRANSFER_LENGTH),但是这个功能会增加双方数据交互的逻辑复杂度,所以暂时放弃了断点续传功能。
Andorid中创建数据需要继承 SQLiteOpenHelper 类,本系统创建数据库的代码方法如图4-2所示。
图4-2 Android创建数据库
onCreate()方法有系统回调,在这个方法里面里面建表(这里是通过执行SQL语句来建表的)。
onUpgrade()方法用于数据库的升级。
4.4 文件管理模块
其他模块跟界面关系就比较大了,主要负责获取分类文件,打开文件,获取文件属性,记录用户选择的要发送的文件(在发送时这些文件会传递给文件传输模块来处理),浏览手机文件夹等。
下面是一些关键的方法:
1) 获取手机内置和外置sdcard路径
返回一个String数组,[0]表示内置sdcard路径 [1]表示外置sdcard路径,不存在则为null
19
西南科技大学本科生毕业论文
private static String[] getSDCards(Context context) {
String [] ret = new String [2];
String exteranl_sd="", inner_sd="";
try {
//利用反射机制调用StorageManager类中的getVolumeList来获取所有挂在点的信息
Class StorageVolume = e("eVolume");
StorageManager storageManager = (StorageManager)
temService(E_SERVICE);//获取系统服务
Method getVolumeList = ss().getMethod("getVolumeList");
Method isRemovable = hod("isRemovable");
Method getPath = hod("getPath");
Object[] volumes = (Object[]) (storageManager);//获取所有挂在点信息
if(volumes == null) return ret;
//根据各个挂载点的属性不同来区分内置sd卡(不可移除),外置sd卡和OTG
for(int i=0; i<; i++) {
if((Boolean)((volumes[i]))) {//该挂载点可以移除:可能是外置SD卡或者OTG
final String temp = (String)(volumes[i]);
if(!ns("usb")) {
exteranl_sd = temp;
}
}else {//否则,该挂载点不可移除,是内置SD卡
inner_sd = (String)(volumes[i]);
}
}
} catch (Exception e) {
tackTrace();
}
ret[0] = inner_sd;
ret[1] = exteranl_sd;
20
西南科技大学本科生毕业论文
return ret;
}
虽然系统提供了一个ernalDirecty来获取sdcard,但是经过测试你会发现这个方法并不能区分获取到的是内置还是外置sdcard。上面的方法是利用Android系统中的一个类StorageVolume中提供的一些方法来稳定获取内置和外置sdcard的路径。但是这个类是隐藏的,所以只能使用java的反射机制来调用其中的 getVolumeList()方法来获取所有挂载点信息。内置sdcard不可以移动(或者说是移除)而外置sdcard可以,所以可以通过反射机制获取isRemovable属性来区分内置和外置的sdcard。
4.4.1 选择要发送的文件
选择文件是发送文件的基础,用户可以自由选择需要发送的文件。用例描述如表4-2所示。
表4-2选择要发送的文件用例描述
功能描述
选择一些想要发送的文件,为发送做准备
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 进入要选择的文件所在的分类,或进入浏览界面
2) 点击需要的文件
3) 成功选择了文件,并且加入
4) 重复前面的步骤可以选择其他的文件,加入发送列表
可选操作流
技术关键:Activity里面保存了选择的文件列表,选择的文件会加入这个列表,并且当这个列表改变时会通知其他界面更新界面。当选择玩文件之后,用户可以点击发送,将这些文件加入到后台的发送队列中开始依次发送文件。界面上会标志出已经选择的文件,并且左下角会显示总共选择了多少个文件。这些选择的文件也可以被清空,然后重新选择。
实际运行截图如图4-3所示。
21
西南科技大学本科生毕业论文
图4-3选择要发送的文件截图
4.4.2 移除要发送的文件
移除要发送的文件和前一个用例选择要发送的文件相对立,用户可以移除一些不想发送或者错误选择的文件。用例描述如表4-3所示。
表4-3移除要发送的文件用例描述
功能描述
和选择要发送的文件对应,移除一些不想发送的文件
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 点击界面右下角的“清空”按钮,弹出确认对话框
2) 点击对话框,确定清空选择列表
3) 选择列表已清空
可选操作流
1) 点击界面左下角的数字按钮,弹出已选择文件列表
2) 点击文件取消选中
关键技术:Activity提供接口,可以移除选择队列中文件,其他 Fragment在移除选中文件时,调用Activity的接口即可。
实际运行截图如图4-4所示。
22
西南科技大学本科生毕业论文
图4-4移除要发送的文件截图
4.4.3 查看文件属性
查看文件的基本属性,以确定该文件是否是自己需要发送的文件。用例描述如表4-4所示。
表4-4查看文件属性用例描述
功能描述
查看文件的一些基本属性,如大小修改日期等
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 找到需要查看属性的文件
2) 长按弹出上下文菜单
3) 点击属性菜单显示文件基本属性
可选操作流
1) 找到需要查看属性的文件
2) 长按弹出上下文菜单
3) 点击其他位置取消查看文件属性
技术关键:知道文件的路径即可获得文件的一些基本属性,如文件名,大小等,最后修改日期等。通过File类可以获取文件的大小,路径,文件名,最后修改日期等信息。获取到的日期是毫秒的形式表示的,所需要要Date类来转化为
23
西南科技大学本科生毕业论文
年月日等。关键代码如图4-5所示。
图4-5显示文件属性关键代码
实际运行截图如图4-5所示。
图4-6查看文件属性截图
4.4.4 打开音乐,视频等文件
调用手机上对应的应用打开音乐,视频,文件,ppt,word,图片等文件,进行文件预览。用例秒速如表4-5所示。
24
西南科技大学本科生毕业论文
表4-5打开文件用例描述
功能描述
打开手机上的文件进行预览
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 找到需要查看属性的文件
2) 长按弹出上下文菜单
3) 点击“打开”菜单进行文件预览
4) 选择Activity来打开
可选操作流
1) 找到需要查看属性的文件
2) 长按弹出上下文菜单
3) 点击其他位置取消打开文件操作
技术关键:根据不同类型的文件,设置不同的Intent来启动对应的Activity预览文件。如视频文件,需要为intent设置type为 video/*,为intent设置data为要打开的文件路径。系统会自动匹配能够接收这个Intent的Activity,如果有多个Activity,系统会给出列表让用户选择,由用户来决定使用哪个Activity打开所选的文件。关键代码如图4-7所示。
图4-7打开文件关键代码
25
西南科技大学本科生毕业论文
实际运行截图如图4-8所示:
图4-8打开本机音乐截图
4.4.5 遍历手机文件
浏览手机的目录结构,查看目录中的文件,并且可以进行查看文件相关属性,或者打开文件,或者加入发送列表等操作。用例描述如表4-6所示。
表4-6遍历手机文件用例描述
功能描述
打开手机上的文件进行预览
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 进入“浏览”分页界面
2) 点击内置SD卡或者外置SD卡开始浏览手机目录
可选操作流
技术关键:根据不同的文件夹获取其子文件夹和子文件列表并排序显示。子文件夹和子文件列表要分开,然后现将子文件夹列表加入最终列表,然后再将子文件列表加入最终列表,这样可以保证文件夹在文件前面。当2台设备连接,可以浏览对方的文件夹内容,其实就是把对方的设备先获取自己指定文件夹下的子文件夹和子文件列表,然后发送到这边的设备,这边的设备接收到了列表之后在本地显示。
实际运行截图如图4-9所示:
26
西南科技大学本科生毕业论文
图4-9浏览文件夹截图
4.5 设备连接管理模块
这个模块的功能就是管理管理设备这块,提供周围可用的设备列表,在用户点击时链接设备,在退出时断开设备连接等。这个模块时文件传输模块的基础,没有先建立连接,设备之间就不能交换数据了。
这个模块涉及的源文件主要是包括:
1) ..src/p2p/
2) ..src/fragment/
这里的也是文件/数据传输的主要源文件,由于这2个模块关系太过紧密,所有大部分代码写在了一起。
下面是这个模块的一些主要功能代码:
1) 开始发现设备
public void discoverDevice(ActionListener listener) {
Log.d(TAG, "WifiP2pHelper-->discoverDevice()");
if (!isWifiOn()) {
toggleWifi(true);
}
27
西南科技大学本科生毕业论文
//如果当前已连接到了设备,中止本次搜索
if (isConnected) {
Log.d(TAG, "WifiP2pHelper-->discoverDevice ended-->isConnected=true");
return;
}
//通知Activity更新界面
ptyMessage(WIFIP2P_DEVICE_DISCOVERING);
//通知底层开始搜索周围的设备
erPeers(channel, listener);
}
首先是查找周围的设备,上面的manager是WifiP2pManger,这是Android系统提供的一个类,主要辅助WifiP2p的管理,并且提供了一系列的方法。如这里的erPeers方法。由于设备的查找,连接等等都需要一定的时间,所以discoverPeers这个方法并不能直接返回结果,而是在查找到新设备是发送一个广播(_P2P_PEERS_CHANGED_ACTION),所以需要接收这个广播,在这时,就可以获取到已经发现的设备了。
2) 连接设备
public void connectDevice(WifiP2pDevice device, ActionListener listener) {
WifiP2pConfig config = new WifiP2pConfig();
Address = Address;//设置连接设置的地址
= ;//设置连接配置WPS
t(channel, config, listener);//调用系统API开始连接设备
connectedDevice = device;
}
这个方法的作用就是连接设备了,和发现设备一样,需要花费一些时间,所以这个方法也不会立刻返回连接结果,而是在连接成功/失败的时候发送一个广播(_P2P_CONNECTION_CHANGED_ACTION),所以我们需要接收这个广播,并且根据广播附带的信息来判断是否连接上了设备,还是断开连接设备了。
4.5.1 连接其他设备
设备之间需要先建立WiFiDirect连接,才能够使用Socket进行通信,传输文
28
西南科技大学本科生毕业论文
件等。用例描述如表4-7所示。
表4-7连接其他设备用例描述
功能描述
连接其他WifiDirect设备
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 点击界面右下角的”传”按钮进入搜索设备界面
2) 点击搜索到的设备开始连接
3) 连接设备成功,自动返回主界面
可选操作流
1) 选择几个文件加入发送列表,然后点击”发送文件”按钮,进入设备搜索界面
2) 点击搜索到的设备开始连接
3) 连接设备成功,自动返回主界面
技术关键:利用系统的WifiP2pManager类中的方法来发现,连接设备。这个类又会通知WifiP2p相关后台的系统服务来进行操作,而且操作比较耗时,所以在调用方法时需要相关的监听。当后台异步操作执行完了会调用这些监听而不让主线程堵塞。
实际运行截图如图4-10所示:
图4-10 连接其他设备截图
29
西南科技大学本科生毕业论文
4.5.2 重命名本机设备
重命名本机的WifiDirect设备,方便其他用户识别自己。用例描述如表4-8所示。
表4-8连接其他设备用例描述
功能描述
修改本机WifiDirect名
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 点击菜单键进入侧滑菜单,点击设备名进入编辑模式
2) 输入新的设备名,然后保存
可选操作流
技术关键:WifiP2pManager里面提供了修改本机WifiDirect名的方法,但是其对外值隐藏的,所以要利用java的反射机制来调用WifiP2pManager类中的setDeviceName()方法,来设置设备名称。
实际运行截图如图4-11所示:
图4- 11修改本机设备名截图
30
西南科技大学本科生毕业论文
4.6 文件/数据传输模块
这是本程序的核心模块,真正实现数据发送/接收到的地方,这里传输带数据可以是一个数字,或者一串字符,或者一个文件,并没有什么限制。在发送数据的时候是以字节为单位发送的,不能以字符为单位,因为有些文件并不是字符文件,如果以字符为最小单位发送,会使接收到底的文件发送一些错误。
由于可能存在很多个要发送的文件,如果同时发送的文件过多,会增大系统功耗,而且传输速度也会因此而降低,所有应用会有个相应的限制,当然应用也给用户添加了界面借口可以规定同时最大的传输文件个数。但要发送的文件过多时,这些文件会在一个发送队列中等待,当有一个发送任务结束之后,应用会自动检查发送队列是否为空,不为空则继续出队前面的文件并开始发送任务,但是整个过程中同时存在的发送任务个数不会超过规定的最大发送个数的。
文件的传输需要发送方和接收方约定好发送的数据的格式,应用中约定如图4-12所示:
图4-12传输数据格式示意图
第一个字节表明自己想干嘛,程序中定义了如下的一些意图:
public static final byte TRANSPORT_INTENT_SENDFILE = 1; //设备交互意图——————>传文件
public static final byte TRANSPORT_INTENT_CMD_ASK_FOR_SUB_DIRS = 2; //设备交互意图——————>发送命令,请求获取文件夹下所有的子文件夹和子文件
public static final byte TRANSPORT_INTENT_CMD_ASK_FOR_DOWNLOAD_FILE = 3; //请求下载文件
public static final byte
TRANSPORT_INTENT_REPLAY_CMD_ASK_FOR_DOWNLOAD_FILE = 4; //回复请求下载文件的结果
public static final byte TRANSPORT_INTENT_DATA_DIRS = 5; //设备交互意图——————>与TRANSPORT_INTENT_CMD_ASK_FOR_SUB_DIRS对应
public static final byte TRANSPORT_INTENT_SEND_TEXT_MSG = 7; //设备交互意图
31
西南科技大学本科生毕业论文
——————>发送文本消息
如果是传文件,那么意图码为TRANSPORT_INTENT_SENDFILE,即1。第一字节之后的其他信息里面又包括了其他的约定,如图4-13所示:
图4-13文件传输数据格式示意图
即如果是文件,发送信息依次如下:
1) 意图代码(1byte)
2) 附加文件信息的长度,假设这个值为X(4byte即1个int)
3) 附加文件信息(长度为X)
4) 文件真正的内容
接收方接收文件的时候也会根据这个约定来接收,即接收文件的过程如下:
1) 接收意图代码
2) 接收文件附加信息的长度,这个长度用于告知下一步该接收多少个字节
3) 接收文件附件信息,用于本地创建和发送方一样名字的文件,保持文件发送前后名称一致。
4) 接收文件内容
其他的几个意图码都是在一个功能中用到的:浏览对方文件夹,并可以下载文件到本地。一次最简单但是完整的过程如图4-15所示。
根据上面的介绍,传输模块的构架很清晰简单,所有具有很强的扩展性,例如想在2台设备之间实现简单的文字聊天功能,只需对传输模块做如下步骤:
1) 添加意图码(如TRANSPORT_INTENT_SENDMSG)
2) 发送和接收的地方做约定,如图4-14所示:
约定格式也很简单:
1) 第一个字节为意图码
2) 剩下的所有内容即为消息内容
发送文本消息相比想发送文件要简单许多。
32
西南科技大学本科生毕业论文
图4-14消息传输数据格式示意图
手机A1 :
请求设备连接()手机B2 :
设备连接成功()3 :
请求浏览对方文件夹()4 :
同意,并返回子文件夹列表()5 :
请求下载文件()6 :
同意请求,加入本机发送队列中()7 :
回复对面请求下载的结果OK()8 :
文件开始发送()
图4-15浏览对方文件夹并下载文件示意图
4.6.1 设置同时发送文件最大个数
设置同时发送文件的最大个数,一般建议是3个,最大允许设到9个。用例描述如表4-9所示。
表4-9连接其他设备用例描述
功能描述
设置同时发送的文件最大个数,不推荐太大,会影响传输性能
前置条件
进入应用主界面
参与者
用户
基本操作流
1) 点击菜单键进入侧滑菜单
2) 点击同时传输个数,进入编辑模式
3) 输入新的设备名,然后点击其他的地方,保存设置。
33
可选操作流
西南科技大学本科生毕业论文
技术关键:修改时,保存到SharedPreference。读取时,先从SharedPreference里面读取值,如果没有,则设置为默认的值。从SharedPreference读取保存的数据如图4-16所示。
图4-16读取最大同时发送文件关键代码
实际运行截图如图4-17所示:
图4-17设置同时传输最大个数截图
4.6.2 发送文件
发送文件是本系统最核心的功能,支持同时发送多个文件,并且在发送文件的时候可以接收文件。针对每一个发送/接收文件的任务,系统都会开启一个新
34
西南科技大学本科生毕业论文
线程专门处理,让每个任务之间具有一定的独立性,任务的进度通过Android中的handler机制发送给UI线程来更新任务的传输进度。用例描述如表4-10所示。
表4-10连接其他设备用例描述
功能描述
发送选择的文件到对方设备
前置条件
设备已连接
参与者
用户
基本操作流
1) 选择需要发送的文件加入发送列表
2) 点击“发送文件”按钮,将文件加入发送队列,等待执行任务。
3) 开始发送文件
可选操作流
技术关键:WifiP2pHelper类提供方法,点击是调用这个方法,将选择的文件加入到WifiP2pHelper类里面的发送队列中,由WifiP2pHelper来管理发送队列。
实际运行截图如图4-18所示:
图4-18发送文件截图
4.6.3 文件/数据传输性能
这由于数据一般很小,所以传输速度也很快。但是文件传输就可能存在大文件传输,非常的耗时,而且可能同时有多个大文件传输,所以为了提高传输性能,
35
西南科技大学本科生毕业论文
本系统做了一下调整:①要传输的文件加入传输队列,等待有其他任务完成了在启动新的任务,保证同时传输的任务不超过指定的个数(最大为9);②对于每个传输任务都会开一个新线程去接收/发送,保证任务之间不会相会影响。
传输速度方面,主要还是和手机的状态以及2台手机之间的距离有关。但是系统处理方面在传输时用的缓存适当的加大,在一定的程度上会增大传输速度。实际运行中,传输速度最大达到个8M/S但是很快又降下来,最低只有几百K/S,平均的传输速度在3M/S左右。
4.7 应用UI设计
一款好的应用界面应该具有这些特点:易用,简单,美观。
1) 易用:用户使用起来上手快,能够快速找到想找的东西,如本应用就对文件进行了分类,方便用户选择要发送的文件。
2) 简单:应用界面就是要简单粗暴,直奔主题,不要在界面上添加无用的东西。
3) 美观:界面给用户的第一印象要好,界面看起来清晰,明确,符合大众的审美观,又具有自己的特色。
本应用就是本着这3个基本原则来进行UI设计的。
4.7.1应用界面框架结构设计
图4-19主界面框架示意图
系统主界面框架结构如图4-19所示,结构说明:
1) 最外层使用Android SDK中自带的DrawerLayout(抽屉布局),里面放入2个界面: 侧滑菜单界面+主界面 (菜单界面默认不显示,可以通过侧滑滑
36
西南科技大学本科生毕业论文
出)。
2) 主界面采用ViewPager+Fragment的结构来实现分页。
结构优点:
1) 结构层次简单,清晰
2) 后续扩展简单(只需添加相应的Fragment,并加入到ViewPager即可)
3) 用户操作简单
4) 扩展性强
4.7.2主界面的设计
上面在介绍应用UI的框架时,提到了主界面的设计是:ViewPager+Fragment。这是目前Android开发中,用到分页浏览时计较流行的用法[12]。
应用中包含了5个分页,如图4-20所示:
图4-20主界面的五个分页
对应的需要5个Fragment来分别实现各个分页。Fragment在翻译为碎片,其实就是一个界面,和Activity类似,但是又有不同点。一个Activity上面可以放多个Fragment,也可以在程序运行中,使用代码来用一个Fragment来替换另一个Fragment。
针对每个分页,都需要对应的一个继承Fragment的页面,对应程序的源代码分别是:
../src/fragment/
../src/fragment/
../src/fragment/
../src/fragment/
../src/fragment/
不同的Fragment里面又可以自定义布局,所以可以实现很多不同的分页。
4.7.3 UI控件的使用
在UI的设计中,用到了很多常用的控件,如TextView,ImageView,EditText,ListView,GridView,ExpandListView等等。一个界面中可以随意包含这些控件。
这些控件的使用也是需要一点技巧的,如ListView显示所有已安装应用。Android中,用适配器来绑定ListView的数据。由于已安装应用的获取需要从系
37
西南科技大学本科生毕业论文
统中读取,读取列表的速度很快,但是要获取应用的图标的话,就会花费一些时间,所以不能等应用获取到所有的图标之后再一起显示,要先显示应用列表,然后在异步加载应用图标,这就要用到ListView的异步加载了[13]。
ListView的异步加载:
这是开发中常用的技术,技术要点如下:
1) 后台启动新线程来执行加载图片资源等耗时工作。
2) 耗时资源加载完成后通知UI线程更新界面[14]。
3) 避免短时间内多次更新界面。
异步加载的好处就是避免主线程阻塞而导致应用无响应退出,把耗时任务都放在子线程中去完成,这样就不会阻塞主线程(即UI线程),同时可以利用Android中的handler机制来进行线程间的通信,通知UI线程更新界面(Android中只能在UI线程中更新界面),以保证好的用户体验[15]。
38
西南科技大学本科生毕业论文
第5章 系统测试
5.1测试环境
由于文件传输需要在2台设备之间进行,所有测试手机相应的也有2台,而且其中一台是运行的最新的Andorid6.0的系统。
测试手机一配置如表5-1所示:
红米3
高通骁龙616
2GB
16GB
MIUI7(基于Android5.1.1)
表5-1 测试手机一配置表手机型号
CPU
运行内存
SD卡大小
手机操作系统
测试手机二配置如表5-2所示:
表5-2 测试手机二配置表
手机型号
CPU
运行内存
SD卡大小
手机操作系统
BQ Aquaris M5.5
未知
2GB
32GB
Android6.0.1
5.2模块功能测试
5.2.1 设置同时传输文件最大个数功能测试
1.测试目的:确保可以设置同时传输文件的最大个数功能有用,并且在实际文件传输时会根据这个值来限制文件发送任务的个数。
2.测试前置条件:程序正常启动,进入主界面,然后进入到侧滑菜单,进入传输文件最大个数的编辑模式。
3.测试用例如表5-3所示
39
西南科技大学本科生毕业论文
表5-3 设置同时传输文件最大个数功能测试用例表
测试用例ID
Regist 修改同1 时传输文件最大个数功能测试
输入空值
删除所有的字符,保存
应用自动放弃本次操作,不做保存,保持数据为编辑前的值
应用自动放弃本次操作,不做保存,保持数据为编辑前的值
是 是
功能点
测试用例名称
操作步骤 预期结果 实际结果
是否执行
是否通过
Regist
2
输入2个及以上的数
点击软键盘输入多个数字
进入非数字键盘输入其他字符
系统只能接收一个数字
系统不接收其他字符
系统只能接收一个数字
是 是
Regist
3
输入非数字字符
系统不接收其他字符
是 是
5.2.2 重命名本机设备功能测试
1.测试目的:确认是否能够重命名本机设备。
2.测试前置条件:程序正常启动,进入主界面,然后进入到侧滑菜单,本机设备名编辑模式。
3.测试用例如表5-4所示:
4.测试结果分析:根据多次的测试发现,当用户的手机设备上开启WiFi时,重命名本机设备会成功,而如果用户的手机设备上没有开启WiFi时,重命名手机设备会失败。所以根据这种情况,可以对本系统做出一些逻辑修改:当用户WiFi开启之后,修改本机设备的编辑框才可用。
40
西南科技大学本科生毕业论文
表5-4 修改本机设备名功能测试用例表
测试用例ID
Regist 1
功能点
修改本机设备名功能测试
Regist 2
输入复合自字符串测试
利用输入法随机输入各种字符
成功修改本机设备名
成功修改本机设备名
是 是
测试用例名称
输入空值测试
删除所有的字符,保存
应用自动放操作步骤 预期结果
实际结果
修改设是否执行
是
是否通过
否
弃本次操作,备名成不做保存,保持数据为编辑前的值
功,设备名现在为空
5.2.3 选择要发送的文件功能测试
1.测试目的:测试是否能够随意选择文件,加入发送队列。
2.测试前置条件:程序正常启动,进入主界面
3.测试用例如表5-5所示:
4.测试结果分析:选择文件的功能正常。
表5-5 选择要发送的文件功能测试用例表
测试用例ID
Regist 1
功能点
选择要发送的文件
测试用例名称
在应用分类里面选择文件
1.进入应用界面
2.随机应用分类选择几个文件
成功的将选择的文件加入发送列表
成功的将选择的文件加入发送列表
操作步骤 预期结果 实际结果
是否是否执行 通过
是 是
41
西南科技大学本科生毕业论文
续表5-5
测试用例ID
Regist 2
功能点
选择要发送的文件
Regist 3
在视频分类里面选择文件
测试用例名称
在音乐分类里面选择文件
1.进入音乐界面
2.随便选择几个文件
1.进入视频界面
2.随便选择几个文件
Regist 4
在浏览分类里面选择文件
1.进入浏览界面
2.随便选择几个文件
成功的将选择的文件加入发送列表
成功的将选择的文件加入发送列表
成功的将选择的文件加入发送列表
成功的将选择的文件加入发送列表
成功的将选择的文件加入发送列表
成功的将选择的文件加入发送列表
是 是
是 是
操作步骤 预期结果 实际结果
是否是否执行 通过
是 是
5.2.4 移除要发送的文件功能测试
1.测试目的:测试是否可以移除/清空已选的要发送的文件。
2.测试前置条件:程序正常启动,进入主界面,随机选择了几个文件。
3.测试用例如表5-6所示:
表5-6 移除/清空发送列表功能测试用例表
测试用例ID
Regist 1
功能点
移除要发送的文件
测试用例名称
移除单个发送文件
1.点击界面左下角的数字,点击取消选中
成功的移除了选择的文件
成功的移除了选择的文件
操作步骤 预期结果 实际结果
是否是否执行 通过
是 是
42
西南科技大学本科生毕业论文
续表5-6
测试用例ID
Regist 2
功能点
移除要发送的文件
测试用例名称
清空发送列表
1.点击右下角的清空按钮,弹出确认对话框
2.点击确认
成功的清空了发送列表
成功的清空了发送列表
操作步骤 预期结果 实际结果
是否是否执行 通过
是 是
5.2.5 发送文件功能测试
1.测试目的:测试是否能正常发送选择的文件。
2.测试前置条件:程序正常启动,进入主界面,并且连接好设备
3.测试用例如表如表5-7所示:
表5-7 发送文件功能测试用例表
测试用例ID
Regist 1
功能点
发送选择的文件
测试用例名称
只发送一个文件
1.随机选择一段时间后,一段时间后,文件成功发送
操作步骤 预期结果 实际结果
是否执行
是
是否通过
是
一个文件,文件成功发加入发送列表
2.点击界面下方的发送按钮
送
Regist 2
发送15个文件
1.随机选择15个文件
2.点击界面发送按钮,开始发送文件
一段时间后,一段时间文件全部成功发送
后,文件全部成功发送
是 是
43
西南科技大学本科生毕业论文
5.2.6 查看传输记录功能测试
1.测试目的:测试传输记录功能是否可用。
2.测试前置条件:程序正常启动,进入主界面
3.测试用例如表5-8所示:
4.测试结果分析:传输记录正常使用,并且能够准确记录所有的记录,随时更新记录的状态。
表5-8 传输记录功能测试用例表
测试用例ID
Regist 1
功能点
传输记录
测试用例名称
一边发送一边查看记录
1.随便选择几个文件
2.点击进入“发送中“显示当前任务”,并且在“发送中“显示当前任务”,并且在发送完操作步骤 预期结果 实际结果
是否是否执行 通过
是 是
历史界面,发送完成之查看传输记录
后,“发送中”成之后,“发没有任务,而已完成中新增任务记录
送中”没有任务,而已完成中新增任务记录
Regist 2
基于Regist1,退出应用之后,重新进入应用查看传输记录
1.在主界面双击返回键退出应用
2.重新进入应用,点击进入历史界面,查看传输记录
“历史“中任然可以看到之前发送的文件记录
“历史“中任然可以看到之前发送的文件记录
是 是
44
西南科技大学本科生毕业论文
续表5-8
测试用例ID
功能点
测试用例名称
发送中退出应用,中断发送
1.随机发送几个文件
2.在文件发送完成之前退出应用
3.重进应用查看传输记录
“历史“中任然可以看到之前发送的文件记录。而且之前未完成的任务全部加入到”以“历史“中任然可以看到之前发送的文件记录。而且之前未完成的任务全部加操作步骤 预期结果 实际结果
是否是否执行 通过
是 是 Regist 3
传输记录
失败“分类中 入到”以失败“分类中
5.2.7 打开本机音乐,视频等文件功能测试
1.测试目的:测试是否可以通过应用打开手机上的文件
2.测试前置条件:程序正常启动,进入主界面
3.测试用例如表5-9所示:
表5-9 打开手机上的文件功能测试用例表
测试用例ID
Regist 1
功能点
打开本机文件
测试用例名称
从已安装应用列表中打开应用
1.进入“应用“界面,长按一个应用,弹出菜单
2.点击“打开”菜单项,弹出可打开该文件的应用列表,选择一个
操作步骤 预期结果 实际结果
是否执行
是否通过
是
成功启动点击的应用
成功启动点击的应用
是
45
版权声明:本文标题:基于Android的WiFi文件传输系统的设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704450136h460285.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论