本发明涉及通信技术领域,尤其涉及一种传输文件的方法及装置。
背景技术:
当前android设备使用者越来越多,很多用户使用时,都是会使用android终端来分享文件,视频或图片。但是分享会有一定的局限性,对于手机的分享,可以利用wifi发送数据,但是前提是需要进行复杂的连接并且连通之后才能发送和接收数据;也可以利用发送,但是发送的数据量很小,速度不快。
技术实现要素:
针对现有技术存在的问题,本发明实施例提供了一种传输文件的方法及装置,用于解决现有技术中传输文件时,不能简单、高效地进行传输,导致用户操作效率下降的技术问题。
本发明提供一种传输文件的方法,所述方法包括:
在蓝牙开启后,与对端终端建立蓝牙通道;
设置wifi热点,根据所述wifi热点的名称及密码生成协议数据;
利用所述蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道;
判断所述wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列;
按照预设的传输规则,利用所述蓝牙通道及所述wifi通道同时传输所述数据队列。
上述方案中,所述利用蓝牙通道向所述对端终端发送所述协议数据,包括:
将所述协议数据转换成字节数组;
利用通信创建方法建立所述蓝牙通道的socket连接;
通过所述socket连接向所述对端终端发送所述字节数组。
上述方案中,所述协议数据具体包括:所述wifi热点的名称、密码及本地ip地址。
上述方案中,所述判断wifi通道是否建立成功,包括:
接收所述对端终端返回的数据;
判断所述返回的数据中是否存在所述本地终端的ip地址;
若所述返回的数据中存在所述本地终端的ip地址,则确定所述wifi通道建立成功。
上述方案中,所述将所述文件拆分为数据队列,具体包括:
利用文件存储方法fileaccess将所述文件分为各数据片;
利用usual方法生成相应的文件名,并将所述相应的文件名与所述各数据进行对应;
将所述文件名进行组合形成所述数据队列。
上述方案中,按照预设的传输规则,利用所述蓝牙通道及所述wifi通道同时传输所述数据队列,具体包括:
利用所述wifi通道,将所述数据队列按照第一传输方式进行传输;
利用所述蓝牙通道,将所述数据队列按照第二传输方式进行传输;其中,
所述第一传输方式为从前到后或从后向前的方式,所述第二传输方式为从前到后或从后向前的方式,所述第一传输方式与所述第二传输方式不同。
本发明还提供一种传输文件的装置,所述装置包括:
建立单元,用于在蓝牙开启后,与对端终端建立蓝牙通道;
生成单元,用于设置wifi热点,根据所述wifi热点的名称及密码生成协议数据;
第一发送单元,用于利用所述蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道;并利用所述蓝牙通道传输所述数据队列;
判断单元,用于判断所述wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列;
第二发送单元,按照预设的传输规则,利用所述wifi通道传输所述数据队列。
上述方案中,所述第一发送单元利用蓝牙通道向所述对端终端发送所述协议数据,具体包括:
将所述协议数据转换成字节数组;
利用通信创建方法建立所述蓝牙通道的socket连接;
通过所述socket连接向所述对端终端发送所述字节数组。
上述方案中,所述协议数据具体包括:所述wifi热点的名称、密码及本地终端的ip地址。
上述方案中,所述判断单元判断wifi通道是否建立成功,具体包括:
接收所述对端终端返回的数据;
判断所述返回的数据中是否存在所述本地终端的ip地址;
若所述返回的数据中存在所述本地终端的ip地址,则确定所述wifi通道建立成功。
本发明提供了一种传输文件的方法及装置,所述法包括:在蓝牙开启后,与对端终端建立蓝牙通道;设置wifi热点,根据所述wifi热点的名称及密码生成协议数据;利用所述蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道;判断所述wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列;按照预设的传输规则,利用所述蓝牙通道及所述wifi通道同时传输所述数据队列;如此,设置wifi热点后,利用蓝牙通道建立与对端终端之间的wifi连接,简化了wifi的连接过程;在传输文件时,可以同时利用wifi通道及蓝牙通道传输,提高了传输效率,进而提高了用户的操作效率。
附图说明
图1为本发明实施例一提供的传输文件的方法流程示意图;
图2为本发明实施例二提供的传输文件的装置结构示意图。
具体实施方式
为了在传输文件时,可以简单、高效地传输,本发明提供了一种传输文件的方法及装置,所述法包括:在蓝牙开启后,与对端终端建立蓝牙通道;设置wifi热点,根据所述wifi热点的名称及密码生成协议数据;利用所述蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道;判断所述wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列;按照预设的传输规则,利用所述蓝牙通道及所述wifi通道同时传输所述数据队列。
下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。
实施例一
本实施例提供一种传输文件的方法,应用在安卓终端设备上,比如:手机、pad等;如图1所示,所述法包括:
s101,在蓝牙开启后,与对端终端建立蓝牙通道。
本步骤中,在蓝牙开启后,与对端终端建立蓝牙通道之前,还需判断蓝牙是否已经打开,具体包括:
获取isenabled参数,利用android中的bluetoothadapter方法判断isenabled的值是否为true,若确定所述isenabled的值为true,则确定蓝牙已经打开;若确定isenabled的值为false,则确定蓝牙还未打开;那么则利用如下代码打开蓝牙:
intentmintent=newintent(bluetoothadapter.action_request_enable);
startactivityforresult(mintent,1);
蓝牙开启之后,根据对端终端的蓝牙名称与对端终端进行配对,建立蓝牙通道。
s102,设置wifi热点,根据所述wifi热点的名称及密码生成协议数据。
本步骤中,蓝牙配对成功后,需要设置wifi热点,具体包括:建立wifi热点的配置项wificonfiguration,然后调用ssid设置wifi热点的名称,再利用presharedkey来设置密码。
这里,为了避免名称与其他wifi名称重复,可以根据当前时间点来设置wifi名称,比如当前时间为2016年11月25日,那么ssid则是字符串20161125。当然,也可以利用别的方式来设置,比如,当终端用户的名字为abb时,那么ssid则是字符串abb。
进一步地,当名称设置好之后,需要进行密码设置,这里,为了确保密码的隐秘性,利用当前时间点与终端的国际移动设备识别码(imei,internationalmobileequipmentidentity)编码的字符串集合来设置密码,具体根据预设的密码长度及提取规则从所述字符串集合中提取密码;比如提取所述字符串集合中的前10位或后10位或任意10位。由于每个终端的imei不一样,因此每个终端所生成的密码是不一样的,因此确保了密码的安全性。
当wifi热点设置好之后,利用wifimanager开启wifi热点功能,设置wifi热点。具体地,利用wifimanager获取到利用wifimanager对象,将wifimanage对象中的setwifienabled赋值为false,以关闭wifi的连网功能。这里,因wifi连网与热点设置不可同时开启,因此在设置热点时,需要关闭wifi的连网功能。
进一步地,当wifi热点的名称及密码设置好之后,根据所述wifi热点的名称及密码生成协议数据;所述协议数据是由json字符串组成,所述协议数据具体包括:所述wifi热点的名称、密码及本地终端的ip地址。其中,协议数据结构可以如下:
s103,利用所述蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道。
本步骤中,当协议数据生成好之后,需要通过蓝牙通道将所述协议数据发送至对端终端,具体包括:
利用buffer=msg.getbytes();将所述协议数据转换成byte数组,所述msg则为协议数据的字符串。
再利用通信创建方法createinsecurerfcommsockettoservicerecord建立所述蓝牙通道的socket连接;完成后,通过所述socket连接向所述对端终端发送所述字节数组。
所述socket连接向所述对端终端发送所述字节数组具体为:利用getoutputstream来创建需要发送数据的输出流,利用write将buffer的数据发送至对端终端,并打开蓝牙接收功能。
其中,在打开蓝牙接收功能时,首先利用receivedatas来新建一个receivedatas类,并执行所述receivedatas类中的start方法通过getoutputstream即可获取接收到的数据。
s104,判断所述wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列。
当向所述对端终端发送协议数据后,对端终端利用read(buffer);将输出流转换为byte数组,转换完成后即可获取到json格式的协议数据。其中,向所述对端终端发送协议数据即是根据所述协议数据建立wifi通道的过程。
在获取到json格式的协议数据后,将从该数据中得到wifi名称和密码数据,同时开始新建wificonfiguration进行连接数据的操作,并将名称和密码加入wificonfiguration,连接完成后,将获取到本地终端的ip的地址;并将数据返回至终端。
这里,所述判断所述wifi通道是否建立成功,包括:接收所述对端终端返回的数据;判断所述返回的数据中是否存在所述本地终端的ip地址;若所述返回的数据中存在所述本地终端的ip地址,则确定所述wifi通道建立成功。若建立成功,则将所述文件拆分为数据队列。
具体地,将所述文件拆分为数据队列,包括:利用文件存储方法fileaccess将所述文件分为各数据片;利用usual方法生成相应的文件名,所述文件名是唯一的,并将所述相应的文件名与所述各数据进行对应;将所述文件名进行组合形成所述数据队列。其中,各个数据片可以为100k字节。
s105,按照预设的传输规则,利用所述蓝牙通道及所述wifi通道同时传输所述数据队列。
本步骤中,当wifi通道建立成功之后,按照预设的传输规则,利用所述蓝牙通道及wifi通道同时传输所述数据队列。
具体地,利用所述wifi通道,将所述数据队列按照第一传输方式进行传输;利用所述蓝牙通道,将所述数据队列按照第二传输方式进行传输;其中,所述第一传输方式为从前到后或从后向前的方式,所述第二传输方式为从前到后或从后向前的方式,所述第一传输方式与所述第二传输方式不同。
当对端终端接收到一个数据片时,则标记该数据片已经完成传输,这样,即可根据标记进行查询传输失败的或者未传输的数据片,所述传输失败的或者未传输的数据片是不存在标记的,以便能使得终端可以重新传输传输失败的或者未传输的数据片。
当对端终端接收到各个数据片后,按照上述的传输规则及文件名进行组合,将所有的文件数据取出写入到一个文件中,当组合完毕后,向所述终端返回传输成功的确认信息,本次传输完毕。
实施例二
相应于实施例一,本实施例还提供一种传输文件的装置,如图2所示,所述装置包括:建立单元21、生成单元22、第一发送单元23、判断单元24、第二发送单元25;其中,
所述建立单元21用于在蓝牙开启后,与对端终端建立蓝牙通道;这里,所建立对单元21在打开蓝牙之前,判断单元24还需判断蓝牙是否已经打开,具体包括:
判断单元24获取isenabled参数,利用android中的bluetoothadapter方法判断isenabled的值是否为true,若确定所述isenabled的值为true,则确定蓝牙已经打开;若确定isenabled的值为false,则确定蓝牙还未打开;那么所述建立单元21则利用如下代码打开蓝牙:
intentmintent=newintent(bluetoothadapter.action_request_enable);startactivityforresult(mintent,1);
所述建立单元21开启蓝牙之后,根据对端终端的蓝牙名称与对端终端进行配对,建立蓝牙通道。
当蓝牙配对成功后,需要设置wifi热点,具体包括:建立wifi热点的配置项wificonfiguration,然后调用ssid设置wifi热点的名称,再利用presharedkey来设置密码。
这里,为了避免名称与其他wifi名称重复,可以根据当前时间点来设置wifi名称,比如当前时间为2016年11月25日,那么ssid则是字符串20161125。当然,也可以利用别的方式来设置,比如,当终端用户的名字为abb时,那么ssid则是字符串abb。
进一步地,当名称设置好之后,需要进行密码设置,这里,为了确保密码的隐秘性,利用当前时间点与终端的国际移动设备识别码(imei,internationalmobileequipmentidentity)编码的字符串集合来设置密码,具体根据预设的密码长度及提取规则从所述字符串集合中提取密码;比如提取所述字符串集合中的前10位或后10位或任意10位。由于每个终端的imei不一样,因此每个终端所生成的密码是不一样的,因此确保了密码的安全性。
当wifi热点设置好之后,利用wifimanager开启wifi热点功能,设置wifi热点。具体地,利用wifimanager获取到利用wifimanager对象,将wifimanage对象中的setwifienabled赋值为false,以关闭wifi的连网功能。这里,因wifi连网与热点设置不可同时开启,因此在设置热点时,需要关闭wifi的连网功能。
进一步地,当wifi热点的名称及密码设置好之后,所述生成单元22用于根据所述wifi热点的名称及密码生成协议数据;所述协议数据是由json字符串组成,所述协议数据具体包括:所述wifi热点的名称、密码及本地终端的ip地址。其中,协议数据结构可以如下:
当协议数据生成好之后,第一发送单元23用于利用蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道;具体包括:
利用buffer=msg.getbytes();将所述协议数据转换成byte数组,所述msg则为协议数据的字符串。
再利用通信创建方法createinsecurerfcommsockettoservicerecord建立所述蓝牙通道的socket连接;完成后,通过所述socket连接向所述对端终端发送所述字节数组。
所述socket连接向所述对端终端发送所述字节数组具体为:利用getoutputstream来创建需要发送数据的输出流,利用write将buffer的数据发送至对端终端,并打开蓝牙接收功能。
其中,在打开蓝牙接收功能时,首先利用receivedatas来新建一个receivedatas类,并执行所述receivedatas类中的start方法通过getoutputstream即可获取接收到的数据。
当所述第一发送单元23向所述对端终端发送协议数据后,对端终端利用read(buffer);将输出流转换为byte数组,转换完成后即可获取到json格式的协议数据。其中,向所述对端终端发送协议数据即是根据所述协议数据建立wifi通道的过程。
在获取到json格式的协议数据后,将从该数据中得到wifi名称和密码数据,同时开始新建wificonfiguration进行连接数据的操作,并将名称和密码加入wificonfiguration,连接完成后,将获取到本地终端的ip的地址;并将数据返回至终端。
所述判断单元24用于判断wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列;这里,所述判断单元24判断所述wifi通道是否建立成功,包括:接收所述对端终端返回的数据;判断所述返回的数据中是否存在所述本地终端的ip地址;若所述返回的数据中存在所述本地终端的ip地址,则确定所述wifi通道建立成功。若建立成功,则将所述文件拆分为数据队列。
具体地,将所述文件拆分为数据队列,包括:利用文件存储方法fileaccess将所述文件分为各数据片;利用usual方法生成相应的文件名,所述文件名是唯一的,并将所述相应的文件名与所述各数据进行对应;将所述文件名进行组合形成所述数据队列。其中,各个数据片可以为100k字节。
当wifi通道建立成功之后,所述第一发送单元23用于按照预设的传输规则,利用蓝牙通道传输所述数据队列;第二发送单元25用于按照预设的传输规则,利用wifi通道传输所述数据队列。
具体地,所述第二发送单元25利用所述wifi通道,将所述数据队列按照第一传输方式进行传输;所述第一发送单元利用所述蓝牙通道,将所述数据队列按照第二传输方式进行传输;其中,所述第一传输方式为从前到后或从后向前的方式,所述第二传输方式为从前到后或从后向前的方式,所述第一传输方式与所述第二传输方式不同。
当对端终端接收到一个数据片时,则标记该数据片已经完成传输,这样,即可根据标记进行查询传输失败的或者未传输的数据片,所述传输失败的或者未传输的数据片是不存在标记的,以便能使得终端可以重新传输传输失败的或者未传输的数据片。
当对端终端接收到各个数据片后,按照上述的传输规则及文件名进行组合,将所有的文件数据取出写入到一个文件中,当组合完毕后,向所述终端返回传输成功的确认信息,本次传输完毕。
本发明提供的一个或多个实施例带来的有益效果是:
本发明提供了一种传输文件的方法及装置,所述法包括:在蓝牙开启后,与对端终端进行蓝牙配对;设置wifi热点,根据所述wifi热点的名称及密码生成协议数据;利用蓝牙通道向所述对端终端发送所述协议数据,根据所述协议数据建立wifi通道;判断所述wifi通道是否建立成功,若建立成功,则将所述文件拆分为数据队列;按照预设的传输规则,利用所述蓝牙通道及所述wifi通道同时传输所述数据队列;如此,设置wifi热点后,利用蓝牙通道建立与对端终端之间的wifi连接,简化了wifi的连接过程;在传输文件时,可以同时利用wifi通道及蓝牙通道传输,提高了传输效率,进而提高了用户的操作效率。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。