admin管理员组

文章数量:1532333

2024年6月26日发(作者:)

西南科技大学本科生毕业论文 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消息传输数据格式示意图

手机

A

1 :

请求设备连接

()

手机

B

2 :

设备连接成功

()

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

西南科技大学本科生毕业论文

续表5-9

测试用

例ID

功能

测试用例

名称

操作步骤 预期结果

实际结

是否

执行

是否

通过

Regist 2

从浏览中

打开APK

类型的文

件,进行安

1.进入“浏览

“界面,随便

找到一个

APK文件,

长按,弹出菜

2.点击打开/

安装

进入到该应

用的安装界

进入到

该应用

的安装

界面

是 是

Regist 3

打开音乐

文件

1.进入“音乐

“界面,随机

选择一个音

乐文件,长

打开手机中

的默认音乐

播放,播放刚

才选中的歌

打开手

机中的

默认音

乐播放,

播放刚

才选中

的歌曲

是 是

按,弹出菜单 曲

2.点击打开

Regist 4

打开视频

文件

1.进入“电影

“界面,随机

选择一个视

频文件,长

打开手机中

的默认视频

播放器,播放

刚才选择的

打开手

机中的

默认视

频播放

器,播放

刚才选

择的视

是 是

按,弹出菜单 视频

2.点击打开

5.2.8 查看文件属性功能测试

1.测试目的:测试是否可以查看不同类型的文件属性,并且可以查看文件的

特殊属性,如音乐文件可以显示其歌手名,专辑,时长等。

46

西南科技大学本科生毕业论文

2.测试前置条件:程序正常启动,进入主界面。

3.测试用例如表5-10:

表5-10 查看文件属性功能测试用例表

测试用

例ID

Regist 1

功能

查看

文件

属性

测试用例

名称

查看普通

文本文件

的属性

1.进入“浏览

“界面,随便

找一个txt格

式的文件,长

按弹出菜单

2.点击属性

显示的属性

内容包括:文

件名称,文件

大小,文件属

性,文件最后

修改日期

显示内容

包括:文

件名称,

文件大

小,文件

属性,文

件最后修

改日期

Regist 2

查看音乐

文件属性

1.进入“音

乐”界面,随

便找一个音

乐文件,长按

弹出菜单

2.点击属性

显示的属性

内容包括:文

件名称,文件

大小,文件属

性,文件最后

修改日期,歌

曲名,歌手

名,专辑名,

歌曲时长

Regist 3

查看视频

文件属性

1.进入“电

影”界面,随

便找一个视

频文件,长按

弹出菜单

2.点击属性

显示的属性

内容包括:文

件名称,文件

大小,文件属

性,文件最后

修改日期,视

频时长

只显示了

文件的基

本属性,

没有显示

视频文件

特有的属

是 否

只显示了

文件的基

本属性,

没有显示

音乐文件

特有的属

是 否

操作步骤 预期结果 实际结果

是否是否

执行 通过

是 是

47

西南科技大学本科生毕业论文

5.2.9 连接设备功能测试

1.测试目的:测试手机是否能够正常连接其他设备

2.测试前置条件:程序正常启动,进入主界面

3.测试用例如表5-11所示:

表5-11 连接设备功能测试用例表

测试用

例ID

功能

测试用例

名称

操作步骤 预期结果 实际结果

Regist 1

连接

设备

正常连接

设备

1.点击“传”一段时间后

按钮,进入设

备搜索界面

2.等待搜索

到设备,点击

一个设备开

始连接

设备成功建

立连接

一段时间

后设备成

功建立连

5.3非功能性测试

5.3.1 连文件传输性能测试

文件/数据传输是本系统的重要功能,其性能会直接影响到整个系统的使用。

测试的内容主要是:传输大文件,多个文件同时传输,双方同时接发文件,最后

接收到的文件是否能够正常打开。测试用例如表5-12所示。

表5-12传输性能测试用例表

用例编号 测试用例 测试结果 说明

Test1 传输一个1G的电影文件

文件传输成功,且可

打开

传输速度约3M/S,

耗时292s

9个文件在传输时,

平均总速度约3M/S

Test2 同时 发送9个文件

文件传输成功,且可

打开

48

西南科技大学本科生毕业论文

续表5-12

用例编号 测试用例 测试结果 说明

Test3

A手机发送一个文件给B,

同时B手机也发一个给A

2台手机接收文件成

2台手机接收文件成

手机的接收和发送

互不影响

实际发送过程中,并

没有那么任务同时

进行,会形成队列,

按一定顺序发送。

Test4

A手机同时发送9个文件给

B,同时B手机也同时发9

个文件给A

根据测试可以发现,文件传输过程还是比较稳定的,但是传输速度会根据手

机的不同以及当前手机的状态不同而不同,但是平均速度在3M/S左右。一台手

机发送和接收文件是互补影响的,当当前传输任务过多时,会对任务排列,依次

发送,保证文件能够最终发送过去。本系统中还有限制一台手机最多可以同时保

持9个发送任务,当然同时可以有9个接收任务,这样的限制也是为了避免同时

的发送任务过多而导致传输性能降低。

5.3.2 系统兼容性测试

由于Android系统的发展迅速,现在市场上的Android系统版本很多,而且

有很多厂商自己定制的系统,所以对不同版本的Android系统进行兼容性测试是

必要的。Android系统5.0算是现在的一个分水岭,因为5.0彻底放弃了Dalvik

虚拟机而采用了ART虚拟机

[16]

,但是由于一些老一点的机器还是使用的4.4版

本,所以会测试本系统在Android4.4-6.0.1版本上的安装运行情况。测试用例如

表5-13所示。

表5-13系统兼容性测试

用例编号 测试用例 测试结果 说明

Test1

在4.4原生Android系统上安装,卸载顺利完适配Android4.4原

生系统

在Android4.4上完

美运行,文件传输功

能正常

进行安装,运行,卸载测试 成。应用运行正常

Test2

在4.4原生Android系统上

进行文件传输,传输大小为

1.1G的一个电影文件

文件传输成功。用时

275s,平均速度

4.1M/S

49

西南科技大学本科生毕业论文

续表5-13

用例编号 测试用例 测试结果 说明

Test3

在Android5.0原生Android

系统上进行应用的安装,运

行,卸载测试

安装,卸载顺利完成

应用运行正常

适配Android5.1原

生系统

Test4

在5.0原生Android进行文

件传输,传输大小为1.1G

的一个电影文件

2台手机发送/接受

文件成功,用时

300s,平均传输速度

3.56M/S

在5.0上完美运行,

文件传输功能正常

Test5

在6.0系统原生Android系

统上进行安装,运行,及卸

安装,卸载顺利完

成,应用正常运行

适配6.0系统,解决

6.0的动态权限问题

Test6

在6.0系统原生Android进

行文件传输,传输大小为

1.1G的一个电影文件

2台手机发送/接受

文件成功,用时

290s,平均传输速度

3.8M/S

在6.0系统上完美运

行,文件传输功能正

Test7

在基于Android5.1的MIUI7 安装,卸载顺利完

上进行安装,运行,及卸载 成,应用正常运行

适配MIUI7

Test8

在基于Android5.1的MIUI7

上传输文件,大小为1.1G

的一个电影文件

2台手机发送/接受在MIUI7上完美运

文件成功,用时280,行

平均传输速度

3.9M/S

50

西南科技大学本科生毕业论文

结 论

本系统主要是使用WiFi直连新技术解决了NFC传输数据小,蓝牙传输数据

慢,网络传输需联网,WiFi热点传输数据时不能Wifi上网的问题。让用户可以

在高速分享大文件的同时,利用Wifi高速上网。

经过测试,本系统已实现了大部分需求,并且具有如下优点:

1) 界面美观简洁,对文件进行了分类,方便快速找到需要的文件。

2) 系统运行流畅稳定,ListView使用了异步记载图片的机制来实现流畅的

界面显示和滑动。

3) 发现设备和连接设备操作简单。

4) 文件传输不限文件格式,并且可以获取到手机上已经安装的应用来分享。

5) 除了发送文件之外还可以发送文本消息,实现简单的文字聊天。

6) 连接设备后,还可以主动浏览对方文件目录,并且下载需要的文件到本

手机。

7) 系统采用拼音匹配技术来实现强大的文件搜索功能。

当然也存在一些不足的地方:

1) 断点续传功能没有实现。由于断点续传功能会增加文件传输2台设备数

据交互的逻辑复杂性,所以这个功能占时没有去实现,但是可以在日后进行补充。

2) 应用中没有加入图片分类的专门页面。这个是处于界面美观的考虑,多

加一个分类会让界面看起来很挤,影响美观性。但是日后可以进行可滑动的控件

来解决这个美观问题。

总的来说系统实现大部分用户需求,但仍存在一些不足的地方需要改进。

51

西南科技大学本科生毕业论文

致 谢

本设计从选题开始到完成,都离不开乔虹老师的耐心指导。针对我的题目,

老师我一些好的建议,让我的题目内容更加丰富,而且难度也比较适中。在整过

过程中,老师花费了很多经历,一直关心我们的进度,并且给了一些实际安排的

建议,让我们可以按时有计划的完成我们应用的设计。在本论文的完成期间,老

师帮助我们改进,提出不足的地方,以及改进意见。在此向导师表示衷心地感谢!

导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!

此外,本次程序能够顺利完成还要感谢几位同学的帮助,感谢你们为我解决

了开发过程中遇到的一些技术问题,感谢你们帮我收集了许多有用的技术资料,

在你们的帮助下,我顺利的完成了应用的开发。在此表示深深的谢意。

最后想所有帮助过我的老师和同学们表示最真挚的谢意!

52

西南科技大学本科生毕业论文

参考文献

[1] 尚金金. Android平台下移动终端与pc机的通信系统设计[D]. 河北工业大学, 2014.

[2] 王云亮, 王光林. 基于Socket的Linux与Windows下WiFi模块间通信的实现[J]. 微型机

与应用, 2014(2):57-59.

[3] 王淼. NFC技术原理与应用[M]. 化学工业出版社, 2014:20-23.

[4] 邓凡平. 深入理解Android[M] WiFi模块NFC和GPS卷. 机械工业出版社, 2014:50-56.

[5] 杨艾平. 基于Wi-Fi Direct的Android文件传输研究与实现[D]. 东华大学, 2014.

[6] 刘昶. Android操作系统的存储技术研究[D]. 北京理工大学, 2011.

[7] 曹硕. 基于Wi-Fi直连的移动P2P联网及其应用[D]. 电子科技大学, 2012.

[8] 陈甫, 余朋. 使用Android Studio开发调试小米盒子应用[J]. 电脑编程技巧与维护,

2014(19):52-53.

[9] Moosavi V. Mobile wireless communications device having touch activated near field

communications (NFC) circuit: EP, US8351854[P]. 2013.

[10] Sridhar A, Nahrstedt K, Vu L. Sangam - Efficient Cellular-WiFi CDN-P2P Group Framework

for File Sharing Service[J]. Fact Sheet, 2012.

[11] 王毅敏. 大型Java项目中Gradle的应用[J]. 电子制作, 2015(2).

[12] Techcon A. Bringing new Enerjy to Java coding, debugging, migration[J]. Eetimes Com,

2014.

[13] Karn V K. Android SQLite essentials[J]. 2014.

[14] Antkiewicz M, Czarnecki K. FeaturePlugin: feature modeling plug-in for Eclipse.[C]//

Proceedings of the 2004 OOPSLA workshop on Eclipse Technology eXchange, ETX 2004,

Vancouver, British Columbia, Canada, October 24, 2004. 2015:67-72.

[15] 杨群. 基于WI-FI热点技术的即时P2P语音通信系统的研究与设计[D]. 华中师范大学,

2014.

[16] 史宁宁. 基于Wi-Fi Direct的移动共享和通讯平台的设计与实现[D]. 长安大学, 2014.

53

本文标签: 文件发送系统设备传输