2023年11月30日发(作者:)

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

基于AndroidWiFi文件传输系统的设

计与实现

摘要:随着智能手机的普及,越来多的人会使用手机来分享文件。虽然目前应用

市场上有很多文件分享的软件,但其传输的方式都存在一定的缺陷。本系统就是

根据目前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引言

随着近几年移动行业的飞速发展,手机已进入智能时代。现在的手机智能平

台主要包括AndroidIOSWin10移动版,而用户最多的还是AndoridIOS

平台,所以熟悉这些智能平台的应用开发是必须的。在日常生活中,朋友之间经

常会分享手机中的一些新鲜的,好玩的,有趣的事情,但是目前的手机端分享方

式都存在一些弊端。如常见的网络分享,这必须要求用户双方都连接互联网,

件比较苛刻。而蓝牙分享虽然不需要联网,但是传输速度比较慢。针对传输速度

慢的问题,想到了WiFi热点传输,的确这个传输速度明显快于蓝牙,但是利用

WiFi热点传输时又有一个问题来了,如果要在这时用WiFi上网呢,这就办不到

了。针对各种分享方式的弊端,需要找到一种新的分享来解决这些问题。而新的

Wifi直连技术,则能很好地解决上面的那些弊端,具有不需联网,传输速度快,

传输文件的时候还能WiFi上网的优点。如今的Android手机中,进入WiFi高级

设置里面就可以看到有WiFiDirectWiFi直连)这个东西,但是官方并没有开发

对应的app来传输文件,而系统已经对WiFi直连这个技术进行了支持,并封装

了相应的api给开发者使用。

1.2选题的目的及意义

根据目前Android手机平台的各种分享方式的弊端,找到一种新的分享文件

的方式,从而解决NFC传输的数据小,蓝牙分享速度慢,网络分享需联网,WiFi

热点分享时不能用WiFi上网的问题。本应用就是利用WiFi直连技术,来解决目

前的一些文件分享方式存在的弊端,从而让Android智能手机用户能够更高效方

便的分享文件。实现在高速分享文件的同时利用WiFi高速上网。

1.3国内外相关研究

201010月,Wi-Fi Alliancewi-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支持设备间的直接连接,所以又称为WiFiP2pP2P架构中定

义了三个组件, 笔者将其称为“ 一个设备, 两种角色” 分别如下。

· 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中的一系列接口,应用开发会经常用到这些接口方法。

Androidsqlite

ContentProvider类获取数据android中数据存储技术主要有:文件存储、

[3]

SharedpreferencesqliteContentProvider和网络存储,在本软件中主要使用到了

文件存储和Sharedpreferencesqlite存储。文件存储是以流的形式读写文件,

可以以文格的格式,也可以以二进制的形式,在java语言中要使用流,则写入

文件的对象必须进行序列化,sqlite是嵌入式移动设备中常用的轻量级数据库

[4]

因为程序运行时,保存在内存中的数据是暂存的,当应用程序退出后,保存

这些数据的内存会被系统回收,清除,所以,需要把一些中要的数据输出到文件,

或者保存到数据库,或网络

[5]

8

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

3.3 数据库设计

3.3.1 Android数据库介绍

Android使用开源的、与操作系统无关的数据库—SQLite。其优点如下:

[6]

轻量级:SQLiteCS模式的数据库软件不同,它是进程内的数据库引擎,

因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动

态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。

独立性:SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需

要“安装”,所以在使用的时候能够省去不少麻烦。

隔离性:SQLite数据库中的所有信息(比如表、视图、触发器)都包含在

一个文件内,方便管理和维护。

跨平台:SQLite数据库支持大部分操作系统,除了在电脑上使用的操作系

统之外,很多手机操作系统同样可以运行,比如AndroidWindows Mobile

SymbianPalm等。

多语言接口:SQLite数据库支持很多语言编程接口,比如CC++Java

PythondotNetRubyPerl等,得到更多开发者的喜爱。

安全性: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系统的研发。2008923日,google官方发布了Android1.0。但

1.0的系统还不支持触摸操作。2009430日,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代号为N7.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虚拟机。原因是Art具有如下的优点:

[8]

1) 应用启动速度变快,体验更流程,触感反馈及时。

2) 更长的电池续航能力。

3) 支持更低的硬件。

4) 系统性能显著提升。

尽管ART虚拟机有一些有点,但是还是有一些缺点。学过java的人知道,

java语言编译出来的是.class类型的中间码,而Android对其优化为.dex格式的

中间码,这也是为什么Android需要虚拟机的原因,因为这些中间码必须专门的

程序来翻译执行。ART虚拟机与DALVIK虚拟机不同的是,ART虚拟机在应

用安装的时候会将应用的那些中间码翻译为机器码并保存,而DALVIK则是边

翻译边执行。所以ART相对与DALVIK启动应用程序的速度更快,运行应用程

序更加流畅,但是安装时间也会更长,也更加暂用存贮空间。

3.4.3 Android四大组件

AndroidActivityService, BraodcastRecevier

ContentProvider

Activity通俗的将就是应用程序的界面,Activity上面可以任意的摆放一

些控件来达到想要的UI效果。在MVC编程思想中充当VIEWCONTORLER

的角色Activity的生命周期如图3-6所示:

[9]

在实际应用开发时,在Activity的几个重要生命周期函数里面做一 些必要

的操作。例如,在onCreate()方法里面,通常会根据布局的xml 文件来生成布

局,在onPause()中,经常会做一些暂停工作,如游戏开发中,会在onPause()

法中来暂停游戏。又如onDestory()方法在Activity销毁的时候调用,可以在这里

做一些保存的工作。

Service:即服务,在后台默默的工作,没有界面不可见,如后台音乐播放等

一般就是使用的ServiceActivityService可以有不同的关系,如果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 StudioAndroidSDK管理器

软件运行平台:Android4.4及以上

4.2 传输记录模块

这个模块主要是负责管理文件传输的记录,包括新增记录,修改记录,保存

记录到数据库,从数据读取等一些记录的基本操作。与数据库模块联系非常紧密。

程序中主要的文件:

1) ../src/provider/

2) ../src/provider/

Record时一个实体类,是记录信息的载体,每个实例就是一条记录。

将传输记录模块主要封装到了RecordManager类里面,由这个类提供接口供

其他地方使用。其他地方如果想要改变传输记录都通过调用本类的一些方法来操

作,而不用直接去操作数据库,操作简单方便,而且有效的降低了代码之间的耦

合度。

由于记录管理者的特性,本例采用单例模式,并且在主Activity创建的时候

初始化这个类的唯一的实例对象。

其构造方法如下:

public static RecordManager getInstance(Context context) {

if(manager == null) { //双重校验锁第一锁

synchronized (RecordManager.class) {

if(manager == null) { //双从校验锁第二锁

manager = new RecordManager(context); //从数据库中读取数据

manager.readDB(); //从数据库中读取记录

}

}

}

return manager;

}

15

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

构造方法主要是做了2件事:

1) 实例化类的唯一对象(单例的体现)。

2) 从数据库中读取传输记录。

这里不得不提的是这里单例的写法,是采用双重校验锁。这样的写法即保证

了类对象的唯一性,又保证了多线程同时访问时的冲突问题,是目前比较推荐的

单例模式的写法之一

[11]

下面介绍RecordManager类里面比较重要的一些方法:

1) 更新数据库:

//更新数据库中的记录

private void updateDB(Record record) {

ContentResolver resolver = context.getContentResolver();

ContentValues contentValues = new ContentValues();

//放入一行各列的值

contentValues.put(Constants.InstanceColumns.ID, record.getId());//放入ID

contentValues.put(Constants.InstanceColumns.NAME, record.getName());//放入名

contentValues.put(Constants.InstanceColumns.PATH, record.getPath());//放入路径

contentValues.put(Constants.InstanceColumns.LENGTH, record.getLength());//

入文件大小

contentValues.put(Constants.InstanceColumns.TRANSFER_LENGTH,

record.getTransported_len());//放入文件已传输大小

contentValues.put(Constants.InstanceColumns.STATE, record.getState());//放入任

务当前状态

contentValues.put(Constants.InstanceColumns.TRANSFER_DIRECTION,

record.getTransport_direction());//放入记录传输方向:发送/接收

contentValues.put(Constants.InstanceColumns.TRANSFER_MAC,

record.getMac());//放入对方设备的MAC地址

}

更新数据库的方法也很简单,ContentValues表示一行数据的值,uri定位到

哪一个,及对应一个Record里用ContentResolover就可以很简单的更新数据库

中对应行的值了。这里的uri在初始化读取数据库的时候会保存下来。

16

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

2) 读取数据库:readDB()

//从数据库读取数据

private void readDB() {

ContentResolver resolver = context.getContentResolver();

Cursor cursor = resolver.query(//从数据库中查询出包含指定列的记录

Constants.InstanceColumns.CONTENT_URI,//数据库的URI

new String[]{

Constants.InstanceColumns.ID,

Constants.InstanceColumns.NAME,

Constants.InstanceColumns.PATH,

Constants.InstanceColumns.LENGTH,

Constants.InstanceColumns.TRANSFER_LENGTH,

Constants.InstanceColumns.STATE,

Constants.InstanceColumns.TRANSFER_DIRECTION,

Constants.InstanceColumns.TRANSFER_MAC}

}while (cursor.moveToNext());

}

}

这个方法只有在RecordManager构造初始化读取数据库时调用,目的就是为

了读取保存在数据库中的传输记录。

4.2.1 查看传输记录

查看传输记录是系统的关键性功能用例,方便用户查看传输记录。用例描述

如表4-1所示。

4-1查看传输记录用例描述

功能描述 前置条件 参与者 基本操作流 可选操作流

查看发送/进入应用用户 1) 点击“历史”或右滑

接收了哪主界面 进入“历史界面”

些文件 2) 点击“历史”界面中

相应的分类,查看该分

类的记录

17

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

技术关键:RecordManager类负责管理传输记录,在退出程序时保存记录到

数据库,进入程序时从数据库读取记录列表。历史界面从RecordManager里面读

取记录列表并显示。

实际运行截图如图4-1所示。

4-1查看传输记录截图

4.3 数据库操作模块

这个模块的作用顾名思义就是对AndroidSQLite数据库进行操作,包括

表的创建,表内数据的增删改查等等一系列数据库操作。程序中的主要文件:

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(Context.STORAGE_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; ilength; 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) 点击界面右下角的1) 点击界面左下角的数

发送的文主界面 “清空”按钮,弹出确字按钮,弹出已选择文件

件对应,移认对话框 列表

除一些不2) 点击对话框,确定清2) 点击文件取消选中

想发送的空选择列表

文件 3) 选择列表已清空

关键技术:Activity提供接口,可以移除选择队列中文件,其他 Fragment

在移除选中文件时,调用Activity的接口即可。

实际运行截图如图4-4所示。

22

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

4-4移除要发送的文件截图

4.4.3 查看文件属性

查看文件的基本属性,以确定该文件是否是自己需要发送的文件。用例描述

如表4-4所示。

4-4查看文件属性用例描述

功能描述 前置条件 参与者 基本操作流 可选操作流

查看文件进入应用用户 1) 找到需要查看属性1) 找到需要查看属性的

的一些基主界面 的文件 文件

本属性,如2) 长按弹出上下文菜2) 长按弹出上下文菜单

大小修改 3) 点击其他位置取消查

日期等 3) 点击属性菜单显示看文件属性

文件基本属性

技术关键:知道文件的路径即可获得文件的一些基本属性,如文件名,大小

等,最后修改日期等。通过File类可以获取文件的大小,路径,文件名,最后修

改日期等信息。获取到的日期是毫秒的形式表示的,所需要要Date类来转化为

23

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

年月日等。关键代码如图4-5所示。

4-5显示文件属性关键代码

实际运行截图如图4-5所示。

4-6查看文件属性截图

4.4.4 打开音乐,视频等文件

调用手机上对应的应用打开音乐,视频,文件,pptword,图片等文件,

进行文件预览。用例秒速如表4-5所示。

24

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

4-5打开文件用例描述

功能描述 前置条件 参与者 基本操作流 可选操作流

打开手机进入应用用户 1) 找到需要查看属性1) 找到需要查看属性的

上的文件主界面 的文件 文件

进行预览 2) 长按弹出上下文菜2) 长按弹出上下文菜单

3) 点击其他位置取消打

3) 点击“打开”菜单进开文件操作

行文件预览

4) 选择Activity来打开

技术关键:根据不同类型的文件,设置不同的Intent来启动对应的Activity

预览文件。如视频文件,需要为intent设置type video/*,为intent设置data

为要打开的文件路径。系统会自动匹配能够接收这个IntentActivity,如果有

多个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更新界面

handler.sendEmptyMessage(WIFIP2P_DEVICE_DISCOVERING);

//通知底层开始搜索周围的设备

manager.discoverPeers(channel, listener);

}

首先是查找周围的设备,上面的managerWifiP2pManger,这是Android

系统提供的一个类,主要辅助WifiP2p的管理,并且提供了一系列的方法。如这

里的erPeers方法。由于设备的查找,连接等等都需要一定的时间,

所以discoverPeers这个方法并不能直接返回结果,而是在查找到新设备是发送一

个广播(_P2P_PEERS_CHANGED_ACTION,所以需要接

收这个广播,在这时,就可以获取到已经发现的设备了。

2) 连接设备

public void connectDevice(WifiP2pDevice device, ActionListener listener) {

WifiP2pConfig config = new WifiP2pConfig();

config.deviceAddress = device.deviceAddress;//设置连接设置的地址

config.wps.setup = WpsInfo.PBC;//设置连接配置WPS

manager.connect(channel, config, listener);//调用系统API开始连接设备

connectedDevice = device;

}

这个方法的作用就是连接设备了,和发现设备一样,需要花费一些时间,

以这个方法也不会立刻返回连接结果,而是在连接成功/失败的时候发送一个广

_P2P_CONNECTION_CHANGED_ACTION所以我

们需要接收这个广播,并且根据广播附带的信息来判断是否连接上了设备,还是

断开连接设备了。

4.5.1 连接其他设备

设备之间需要先建立WiFiDirect连接,才能够使用Socket进行通信,传输文

28

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

件等。用例描述如表4-7所示。

4-7连接其他设备用例描述

功能描述 前置条件 参与者 基本操作流 可选操作流

连接其他进入应用用户 1) 点击界面右下角的1) 选择几个文件加入发

WifiDirect主界面 按钮进入搜索设备送列表,然后点击发送

设备 界面 文件按钮,进入设备搜

2) 点击搜索到的设备索界面

开始连接 2) 点击搜索到的设备开

3) 连接设备成功,自动始连接

返回主界面 3) 连接设备成功,自动返

回主界面

技术关键:利用系统的WifiP2pManager类中的方法来发现,连接设备。这

个类又会通知WifiP2p相关后台的系统服务来进行操作,而且操作比较耗时,所

以在调用方法时需要相关的监听。当后台异步操作执行完了会调用这些监听而不

让主线程堵塞。

实际运行截图如图4-10所示:

4-10 连接其他设备截图

29

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

4.5.2 重命名本机设备

重命名本机的WifiDirect设备,方便其他用户识别自己。用例描述如表4-8

所示。

4-8连接其他设备用例描述

功能描述 前置条件 参与者 基本操作流 可选操作流

修改本机进入应用用户 1) 点击菜单键进入侧

WifiDirect主界面 滑菜单,点击设备名进

入编辑模式

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) 附加文件信息的长度,假设这个值为X4byte1int

3) 附加文件信息(长度为X

4) 文件真正的内容

接收方接收文件的时候也会根据这个约定来接收,即接收文件的过程如下:

1) 接收意图代码

2) 接收文件附加信息的长度,这个长度用于告知下一步该接收多少个字节

3) 接收文件附件信息,用于本地创建和发送方一样名字的文件,保持文件

发送前后名称一致。

4) 接收文件内容

其他的几个意图码都是在一个功能中用到的:浏览对方文件夹,并可以下载

文件到本地。一次最简单但是完整的过程如图4-15所示。

根据上面的介绍,传输模块的构架很清晰简单,所有具有很强的扩展性,例

如想在2台设备之间实现简单的文字聊天功能,只需对传输模块做如下步骤:

1) 添加意图码(如TRANSPORT_INTENT_SENDMSG

2) 发送和接收的地方做约定,如图4-14所示:

约定格式也很简单:

1) 第一个字节为意图码

2) 剩下的所有内容即为消息内容

发送文本消息相比想发送文件要简单许多。

32

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

4-14消息传输数据格式示意图

手机手机

AB

1 : ()

请求设备连接

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主界面的五个分页

对应的需要5Fragment来分别实现各个分页。Fragment在翻译为碎片,

其实就是一个界面,和Activity类似,但是又有不同点。一个Activity上面可以

放多个Fragment,也可以在程序运行中,使用代码来用一个Fragment来替换另

一个Fragment

针对每个分页,都需要对应的一个继承Fragment的页面,对应程序的源代

码分别是:

../src/fragment/

../src/fragment/

../src/fragment/

../src/fragment/

../src/fragment/

不同的Fragment里面又可以自定义布局,所以可以实现很多不同的分页。

4.7.3 UI控件的使用

UI的设计中,用到了很多常用的控件,TextViewImageViewEditText

ListViewGridViewExpandListView等等。一个界面中可以随意包含这些控件。

这些控件的使用也是需要一点技巧的,如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 CPU

2GB 运行内存

16GB SD卡大小

MIUI7(基于Android5.1.1 手机操作系统

5-1 测试手机一配置表

测试手机二配置如表5-2所示:

5-2 测试手机二配置表

手机型号 BQ Aquaris M5.5

CPU 未知

运行内存 2GB

SD卡大小 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

选择在音乐分1.进入音乐成功的将选成功的将

要发类里面选界面 择的文件加选择的文

送的择文件 入发送列表 件加入发

文件 送列表

Regist 3

在视频分1.进入视频成功的将选成功的将

类里面选界面 择的文件加选择的文

择文件 入发送列表 件加入发

2.随便选择

几个文件

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

发送151.随机选择一段时间后,一段时间

文件 15个文件 文件全部成后,文件

2.点击界面

发送按钮,

开始发送

文件

功发送 全部成功

发送

43

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

5.2.6 查看传输记录功能测试

1.测试目的:测试传输记录功能是否可用。

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

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

4.测试结果分析:传输记录正常使用,并且能够准确记录所有的记录,随时

更新记录的状态。

5-8 传输记录功能测试用例表

测试用功能测试用例是否是否

ID 名称 执行 通过

Regist 1

传输一边发送1.随便选择“发送中“显“发送中

记录 一边查看几个文件 示当前任“显示当前

记录 务”并且在任务”,并

2.点击进入

且在发送完发送完成之

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

历史界面,

查看传输

记录

后,“发送中”成之后,“发

没有任务,送中”没有

已完成中新任务,而已

增任务记录 完成中新增

任务记录

Regist 2

基于1.在主界面“历史“中任“历史“中

Regist1退双击返回然可以看到任然可以看

出应用之键退出应之前发送的到之前发送

后,重新进 文件记录 的文件记录

入应用查

看传输记

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

从浏览中1.进入“浏览进入到该应进入到

打开APK“界面,随便用的安装界该应用

类型的文找到一个 的安装

件,进行安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,2台手机接收文件成手机的接收和发送

同时B手机也发一个给A 互不影响

2台手机接收文件成实际发送过程中,A手机同时发送9个文件给

没有那么任务同时B,同时B手机也同时发9

进行,会形成队列,个文件给A

按一定顺序发送。

Test4

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

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

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

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

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

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

5.3.2 系统兼容性测试

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

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

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

虚拟机而采用了ART虚拟机,但是由于一些老一点的机器还是使用的4.4

[16]

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

5-13所示。

5-13系统兼容性测试

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

Test1

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

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

Android4.4上完4.4原生Android系统上文件传输成功。用时

美运行,文件传输功进行文件传输,传输大小为275s,平均速度

能正常 1.1G的一个电影文件 4.1M/S

Test2

49

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

续表5-13

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

Test3

Android5.0原生Android安装,卸载顺利完成适配Android5.1

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

行,卸载测试

Test4

5.0原生Android进行文2台手机发送/接受5.0上完美运行,

件传输,传输大小为1.1G文件成功,用时文件传输功能正常

的一个电影文件 300s,平均传输速度

3.56M/S

Test5

6.0系统原生Android安装,卸载顺利完适配6.0系统,解决

统上进行安装,运行,及卸成,应用正常运行 6.0的动态权限问题

Test6

6.0系统原生Android2台手机发送/接受6.0系统上完美运

行文件传输,传输大小为文件成功,用时行,文件传输功能正

1.1G的一个电影文件 290s,平均传输速度

3.8M/S

Test7 适配MIUI7

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

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

Test8

在基于Android5.1MIUI72台手机发送/接受MIUI7上完美运

上传输文件,大小为1.1G文件成功,用时280

的一个电影文件 平均传输速度

3.9M/S

50

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

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

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

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

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

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

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

界面显示和滑动。

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

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

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

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

手机。

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

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

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

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

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

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

来解决这个美观问题。

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

51

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

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

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

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

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

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

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

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

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

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

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

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

参考文献

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

[2] 王云亮, 王光林. 基于SocketLinuxWindowsWiFi模块间通信的实现[J]. 微型机

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

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

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

[5] 杨艾平. 基于Wi-Fi DirectAndroid文件传输研究与实现[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