基于Android的WiFi文件传输系统的设计与实现要点.docx
《基于Android的WiFi文件传输系统的设计与实现要点.docx》由会员分享,可在线阅读,更多相关《基于Android的WiFi文件传输系统的设计与实现要点.docx(61页珍藏版)》请在冰豆网上搜索。
基于Android的WiFi文件传输系统的设计与实现要点
基于Android的WiFi文件传输系统的设计与实现
摘要:
随着智能手机的普及,越来多的人会使用手机来分享文件。
虽然目前应用市场上有很多文件分享的软件,但其传输的方式都存在一定的缺陷。
本系统就是根据目前Android应用市场上各种文件传输软件的优缺点,使用WiFi直连和SOCKET通信来传输文件,解决了蓝牙传输速度慢,NFC传输数据小,网络传输需要流量或网络连接,WiFi热点传输时不能使用WiFi上网等问题。
本系统包含了文件的搜索,管理,删除,文件/消息传输等功能。
最多支持9个文件同时发送,在连接设备后,可以浏览对方设备的文件目录。
本文首先介绍了选题背景和现状,然后详细阐述了系统中使用的关键技术的发展和相关知识。
通过对系统的运行测试得出可以发现:
系统运行流畅,多文件传输稳定,传输速度也很快,满足用户需求,具有一定的商业价值及较强的使用推广价值。
关键词:
WiFi直连;SOCKET通信;文件搜索
DesignandImplementationofWiFi-DirectFileTransferSystemonAndroidPlatform
Abstract:
Withthepopularityofsmartphones,moreandmorepeoplewillusemobilephonestosharefiles,althoughtherearealotofdocumentsonthemarketshareofthesoftware,butthewaytheyaretransferredtodeterminetheexistenceofacertain.ThissystemisdesignedtotheadvantagesanddisadvantagesoftheAndroidMarketonavarietyoffiletransfersoftware,usingWiFi-DirectconnectionandsocketcommunicationtoachievethefiletransmissiontosolvetheBluetoothtransmissionspeedisslow,smallNFCdatatransmission,thetransmissionnetworktonetworktrafficorconnection,WiFihotspotstransmissioncannotuseWiFiInternetaccessandotherissues.Thisapplicationcontainsthefilesearch,management,delete,file/messagetransferandotherfunctions.Supportsupto9filesatthesametime,inconnectionwiththedevice,youcanbrowsethefiledirectoryoftheotherequipment.
Thispaperfirstlyintroducesthebackgroundandcurrentsituationoftheselectedtopic,andthendescribesthedevelopmentofkeytechnologiesandrelatedknowledgeindetail.Throughtheoperationtestofthesystemobtainedcanbefound:
theoperationofthesystemisverystablesmooth,multidocumenttransmissionisrelativelystable,transmissionspeedisfaster,basicallymeettheneedsofusers,hasacommercialvalueandgoodpopularizationandusevalue.
KeyWords:
Wifi-Direct,socketcommunication,high-speedtransmission
第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-FiAlliance(wi-fi联盟)发布Wi-FiDirect白皮书,白皮书中介绍了有关于这种技术的基本信息、这种技术的特点和这种技术的功能,Wi-FiDirect标准是指允许无线网络中的设备无需通过无线路由器即可相互连接。
与蓝牙技术类似,这种标准允许无线设备以点对点形式互连,而且在传输速度与传输距离方面则比蓝牙有大幅提升[1]。
按照定义,Wi-FiCERTIFIEDWi-FiDirect设备是支持对等连接的设备,这种设备既支持基础设施网络,也支持P2P连接。
Wi-FiDirect设备能够作为典型的站点(STA)加入基础设施网络,而且必须支持Wi-FiProtectedSetup加入者功能。
Wi-FiDirect设备通过组建小组(以一对一或一对多的拓扑形式)来建立连接,小组的工作形式与基础设施BSS类似。
由一部Wi-FiDirect设备负责整个小组,包括控制哪部设备加入、小组何时启动和终止等。
这种设备对于传统客户设备而言就是一部接入点,能够提供基础设施接入点所提供的部分服务[2]。
最初,Wi-FiAlliance®联盟的这一新标准原名为“Wi-Fipeer-to-peer”,而最终定名为WiFiDirect,面向各种Wi-Fi设备,从电脑到手机、到电脑外设,到家电等等。
符合该标准的设备无需热点和路由器,就可以方便的和其他设备实现直接连接,传输数据或共享应用。
Wi-FiDirect可以支持一对一直连,也可以实现多台设备同时连接,并且Wi-FiDirect标准将会支持所有的Wi-Fi设备,从11a/b/g至11n,不同标准的Wi-Fi设备之间也可以直接互联。
由于WiFiDirect支持设备间的直接连接,所以又称为WiFiP2p。
P2P架构中定义了三个组件,笔者将其称为“一个设备,两种角色”,分别如下。
·P2PDevice:
它是P2P架构中角色的实体,可把它当做一个WiFi设备。
·P2PGroupOwner:
GroupOwner(GO)是一种角色,其作用类似于
InfrastructureBSS中的AP。
·P2PClient:
另外一种角色,其作用类似于InfrastructureBSS中的STA。
实际上,P2P技术模仿了InfrastructureBSS网络结构。
在组建P2PGroup(即P2PNetwork)之前,智能终端都是一个一个的P2PDevice。
当这些P2PDevice设备之间完成P2P协商后,其中将有一个并且只能有一个Device来扮演GO的角色(即充当AP),而其他Device来扮演Client的角色。
P2P设备之间想要互相发现对方,则需要P2PDiscovery的支持.
P2PDiscovery的作用很简单,就是使多个P2PDevice能够互相发现并构建一个Group。
根据规范,它包括四个主要技术子项。
·DeviceDiscovery:
用于P2P设备搜索周围其他支持P2P的设备。
·ServiceDiscovery:
该DeviceDiscovery基础上,P2P还支持搜索指定的服务。
这部分功能属于可选项,笔者觉得它和2.2.5节中提到的Bonjour类似。
·GroupFormation:
用于决定两个P2PDevice谁来扮演GO,谁来扮演Client。
·P2PInvitation:
用于激活一个PersistentGroup,或者用于邀请一个Client加入一个当前已存在的Group。
第2章系统需求分析
2.1应用需求概述
根据本应用的目标可以列出这些需求:
1)能够选择要发送的文件,也能移除不想发的文件
2)能够发送文件(核心需求,要能成功发送/接受文件)
3)简单的文件管理(浏览,删除文件等)
4)重命名本机设备(基本需求,方面手机在传文件时能够分辨设备)
5)查看文件传输记录(核心需求,记录接受/发送了哪些文件)
6)查看正在传输的文件状态(核心需求)
系统功能结构如图2-1所示。
图2-1应用功能结构图
2.2用户类与特征
APP用户:
此类用户主要是使用应用来分享文件,并且实时查看传输记录,也可以查看传输的历史记录。
同时亦可以使用应用来对本机设备进行简单的管理,如重命名本机设备,查看本机设备上的一些文件属性等等,还是可以预览该文件。
2.3系统功能性需求分析
根据对市场上其它分享应用的调查和分析,可以列出应用程序的功能用例,系统用例图如图2-2所示:
图2-2系统用例图
2.4系统非功能性需求
开作为一款实用的分享程序,除了基本的功能之外,应用还应该满足一些非功能性的需求:
如界面的美观,界面使用的流畅度,用户点击相应速度,对不同版本的Android系统的兼容性,以及应用的稳定性等等。
界面的美观及使用流畅度:
界面应该符合大众的审美观,而且具有一点的特色。
界面之间切换应该平滑流畅,不应该出现明显的卡顿感。
用户点击的相应速度:
为了保证良好的用户体验,应用对用户的点击或长按等一系列操作的相应速度不应该超过1s。
对不同的Android系统的兼容性:
应该尽可能的兼容主流的各个版本的系统,更具目前的手机市场上Android系统的情况,本应用应该兼容4.4及以上的Android系统。
稳定性:
用户正常的操作中,系统能够正常运行。
文件传输速度:
在正常距离范围类,传输平均总速度应大于3M/S。
多任务传输:
系统应支持多个传输任务同时进行,但是为了避免同时传输任务过多而引起的系统性能降低,系统应该对同时传输的任务个数有限制。
系统界面的加载:
由于应用中涉及到应用图标,图片、电影、音乐等文件的缩略图的获取及显示,为了提升系统的流畅度,系统应采用图片等耗时资源的异步加载技术。
第3章系统概要设计
3.1应用模块划分及模块功能介绍
根据需求分析,可以划分出5个模块:
1)传输记录管理模块
2)数据库操作模块
3)设备连接管理模块
4)文件/数据传输模块
5)文件管理模块。
每个模块都具有独立的完整的功能,模块之间又具有一定的的联系,所有的模块中,文件的传输模块是核心,它与其他的几个模块都存在之间或者间接的关系。
模块之间的关系如图3-1所示:
图3-1系统各模块关系图
各个模块又包含了许多具体的功能:
1)传输模块记录:
记录的管理。
2)数据库操作模块:
保存记录到数据库,读取数据库中的记录,更新数据库中的记录。
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]。
3.3数据库设计
3.3.1Android数据库介绍
Android使用开源的、与操作系统无关的数据库—SQLite[6]。
其优点如下:
轻量级:
SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。
使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。
而且那个动态库的尺寸也相当小。
独立性:
SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。
隔离性:
SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。
跨平台:
SQLite数据库支持大部分操作系统,除了在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、WindowsMobile、Symbian、Palm等。
多语言接口:
SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。
安全性:
SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。
这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。
在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。
在发出独占锁定后,其他的读或写操作将不会再发生。
3.3.2本系统数据库设计
命名规则:
表名:
应用名_表记录的内容名(如传输记录表名:
wifi_direct_records)
字段名:
字段意义的英文_(如名字:
name_)
本系统只需要建一张表即可,来保存传输记录,每一行就是一条记录。
Records记录表字段结构如图3-3所示。
图3-3Records表结构
各个字段的含义如表3-1所示:
表3-1Records表字段含义
字段名
id_
name_
path_
length_
state_
transfer_lenght_
transfer_mac_
字段类型
Int
string
string
string
string
string
string
字段意思
记录id
文件名
文件路径
文件长度
传输的状态
已传长度
对方设备的地址
由于只有一张表,所以数据库的设计比较简单。
3.4Android开发相关技术介绍
3.4.1Android的发展历史
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系统的只有少部分,原因是那些手机的OEM厂商没有做相应的升级适配,鉴于这种情况,google据说会从Android7.0开始逐渐收回系统的升级权限,即由google官方直接推送升级,而不在由OEM厂商来升级了,这对于广大的Android智能手机用户来说是个好消息,以后就不用苦苦等手机厂商来升级了[7]。
3.4.2Android系统结构介绍
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-5Android系统结构分层图
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.3Android四大组件
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也会结束,但是如果Activity以绑定的方式启动Service,那么在Activity结束后,Servcie并不会对应结束[10]。
图3-6Activity生命周期
BraodcastRecevier:
广播接收器,用于接收广播,这是Android系统进程间通信的方法之一。
广播分为系统广播和自定义广播,系统广播是系统发送的一些重要广播,如开机完成,电池电量改变等等一些系统活动都会发送广播。
当然用户在应用程序也可以自定义发送一些广播,然后在另外的地方一用BraodcastRecevier来接收。
ContentProvider:
这是应用程序间共享数据的有效途径。
Android系统中的应用程序都运行在单独的虚拟机中,对应底层Linux系统中的一个单独进程