跟着科技的不断的开展,以及人们关于高科技产品的依靠,智能可穿戴设备逐渐的开展起来,走进了人们的日常日子。智能手表、智能眼镜的面世为智能可穿戴设备的开展带来了新的方向,Android体系广泛的运用于智能可穿戴设备、智能手机中。为了使智能可穿戴设备更好的与手机彼此配合,满意于人们的需求,本文研讨了蓝牙长途操控功用,完结了具有长途操控功用的运用程序。因为经过蓝牙传送的数据可以被追寻窃取到,发送数据的安全性也尤为重要,经过比较本文选用RC4和RSA混合加密办法对发送的数据进行加密。为了习惯不同品牌的智能手表,首要完结了在手机之间的长途操控功用。程序运用在手表上时,只需对显现界面的长宽份额依据手表的分辨率进行修正,即可满意功用性的需求。
1 蓝牙模块规划
1.1 Android设备间树立蓝牙衔接
完结经过蓝牙的长途操控,最基本的操作是要先树立设备之间的蓝牙衔接,Android SDK供给了功用完善的API,经过调用体系的API可以完结对邻近蓝牙设备查找、回来长途设备的硬件地址、树立衔接、断开衔接等作业。蓝牙衔接的树立首要分为以下两个进程:
(1)查找邻近蓝牙设备
BluetoothAdapter 类中供给了本地蓝牙适配器的接口,一切的蓝牙交互都是从此API开端的,首要功用有开关蓝牙设备、扫描蓝牙设备、设置或获取蓝牙状况值、获取蓝牙称号、获取蓝牙Mac地址等。调用enable() 办法翻开本地的蓝牙,然后调用startDiscovery()查找邻近设备,将一切查找到的蓝牙地址存储在列表中。经过取得的长途蓝牙设备的地址,实例化一个蓝牙设备的句子如下:
BluetoothDevice device =BluetoothAdapter .getRemoteDevice(address)
(2)树立蓝牙衔接
树立蓝牙衔接的进程中的两个设备,别离充当了Server和Client。关于Server端经过UUID来创立一个BluetoothServerSocket来收听来自其他设备的衔接恳求,当有远端设备发来树立衔接的恳求,对恳求进行呼应完结蓝牙的衔接。在程序中运用如下句子:
BluetoothServerSocket mmServerSocket = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, Y_UUID_SECURE);
关于Client端, 运用第1步中实例化的蓝牙设备BluetoothDevice,经过 UUID创立一个BluetoothSocket, 发送衔接恳求,与Server端树立衔接, 来完结数据的接纳和发送,在程序中运用如下句子:
BluetoothSocket mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
Server端BluetoothServerSocket代表一个翻开服务器套接字侦听传入的恳求,类似于一个TCP SeverSocket,当衔接树立成功后,调用BluetoothServerSocket接口的 accept()办法,回来一个BluetoothSocket目标。BluetoothSocket用来代表一个蓝牙套接字,这个套接字类似于 TCP套接字。这是运用程序的衔接点,经过此接口可以完结蓝牙数据的接纳和发送。调用BluetoothSocket接口中的办法,得到输入输出流,在运用程序中向输出流中写数据完结蓝牙数据的发送,从输入流读数据,完结蓝牙数据的接纳。
1.2 自界说蓝牙长途操控协议
Android体系上蓝牙的衔接进程经过以上的两步即可树立完结,在运用中关于蓝牙运用只是限于数据的传送,关于数据的内容并不关怀。可是这并不能满意用户的需求,用户更希望经过蓝牙完结长途操控的功用。当时蓝牙发送的数据并没有对内容进行考虑,只是是简略的数据传送,假如想完结蓝牙的长途操控,那么就需求自界说发送的数据结构。操控信息和一般数据信息均经过蓝牙在设备之间进行传送,若想对操控信息和数据信息进行区别,就要在已有的发送数据的首部,增加头结点,设置头结点占用1字节的存储空间,作为操控位标识,用来标识传递信息的类型。1 字节的头结点最多可以标识出256种不同的信息类型,在现阶段的运用进程中可以满意需求,当然假如操控类型增加,只需增加操控位的位数。界说的数据结构如下所示:
本运用程序完结了手机经过蓝牙长途操控另一部手机进行图片预览以及摄影功用。因而发送信息分为两类,一类发送的是图画的数据信息,在Android程序中界说操控位为:
private static final byte DATA =(byte) 0;
另一类是摄影指令,在Android程序中界说操控位为:
private static final byte TAKE_PHOTO = (byte)1;
假如欲完结更多的操控功用,可以自界说更多的操控位类别,在程序进行相应的呼应,即可完结更多的操控功用。
当Sever端收到数据今后,关于数据的头结点进行判别。经过判别操控位的类型来区别出是数据信息仍是操控信息,回来给主函数对其呼应。假如接纳到的数据包为数据信息,则调用图画显现功用,将接纳的图片显现出来。假如收到的数据的是摄影指令,即可调用摄影功用模块,将摄影的相片进行存储。
2 加密模块规划
尽管自界说的蓝牙数据结构满意了人们经过蓝牙长途操控的需求,可是却也存在着必定的安全性问题。在实践日子中,环境比较杂乱,无线传输的信号可以被别人经过一些东西监测并且窃取到。假如当用户传送的图片信息被别人截取,用户的隐私就会被轻松的获取到。可是这并不算最危险的,假如在程序中增加了许多操控信息,操控信息被别人截取并且把握后,那么或许就会导致手机被别人操控,这将给用户带来更大的丢失。
为了确保信息的安全性,需求对蓝牙发送的数据进行加密操作。数据的加密一般要经过杂乱加密算法来完结,可是关于手机而言,运算功率不是很高,并且若要实时的预览长途设备收集到的数据,也就意味着要在极短的时刻内,加密和解密很多的数据,那么加密算法的加密功率愈加要害。
文献4经过运用一种依据AES和RSA的混合加密算法来确保蓝牙通讯进程中的数据安全。AES算法以其在块加密高效的特色运用与蓝牙通讯的数据信息加密上,RSA算法在秘钥管理上比较有优势,可以有很高的安全性,因而用来加密AES的秘钥信息。
文献5比较了RC4 和AES关于设备CPU时刻占用、内存耗费以及电池电量的耗费进行了剖析比照,得出了RC4更适合于大数据包的加密,而AES更适合于小数据包的加密。
经过多方面的归纳比较,本文选用RC4和RSA混合加密的办法对数据进行加密。运用RC4在大数据包加密速度快的优势,首要对数据运用RC4进行加密。因为RC4加密算法相对简略,其安全性上也存在着必定的危险,为了把这种危险下降,选用混合加密的处理办法对数据进行操作。RC4加密算法加密完数据信息后,进行第2次加密,加密RC4的秘钥信息。因为RC4秘钥的长度比较短,可以选用运算进程相对杂乱可是安全性十分高的RSA加密算法。整个的加密进程如图1所示。
图 1数据加密进程
加密的进程首要分为两步:
榜首步,关于原始数据 Original Message用RC4秘钥来进行加密。
第二步,关于RC4秘钥运用RSA进行加密,确保了此秘钥在数据传输安全性。避免了信息被截取后,简单剖分出RC4秘钥内容的危险。
解密进程如图2所示。
图2数据解密进程
解密进程相同分为两个进程,当运用程序收到发送来的数据后,榜首步读取RC4秘钥部分,经过RSA的私有秘钥进行解密,复原RC4秘钥。第二步,运用RC4秘钥对数据部分进行解密,复原出图画信息。
把握了RC4加密算法和RSA加密算法后,即可完结混合加密算法。对发送的数据进行混合加密,确保用户数据的安全性。
终究写入蓝牙输出流中的数据首要包含3部分,如下所示:
榜首部分,数据的长度,在Android程序中,为了将接连发送的图片的信息,每一帧辨认出来,还需求在头部增加一个数据信息长度。以便在数据被接纳到后,可以确认所要读取的字节数。
第二部分是RC4秘钥,这部分中RC4的秘钥是被RSA所加密后的成果,可以确保RC4的秘钥再被窃取到后也不可以直接运用,在当今计算机的运算功率下,还不可以完结对RSA加密算法的破解。
第三部分是经RC4加密的数据信息。来自上层的运用程序欲发送的未加密的数据到了此模块,要进行RC4加密。信息中保存着一切的用户操作的信息。这部分的数据长度是依据状况来分配。假如是操控信息,那么信息长度会十分短。假如是图片数据,那么信息长度会比较长。这个长度信息由榜首部分的数据长度进行记载。
3.蓝牙长途操控摄影程序规划
本程序是在依据Android操作体系的智能手机上构建的一个长途操控程序。程序中包含着蓝牙衔接的树立、蓝牙数据的编码与传送、数据加密3部分。完结了经过手机实时显现另一部手机端摄像头收集到的数据,经过点击程序中的摄影键即可操控手机进行相片的摄影。程序的流程图如图3所示。
图3蓝牙长途操控程序流程图
3.1 树立蓝牙衔接
创立DeviceListActivity类用于蓝牙设备的查找,回来挑选的蓝牙设备的称号和地址。
其功用流程如图4所示。
图4蓝牙衔接树立流程图
经过查找设备功用可取得周围可见的蓝牙设备信息,以列表的办法显现一切查找到的设备。用户依据需求,挑选所要衔接的设备,DeviceListActivity类回来设备的称号以及MAC地址。
3.2 蓝牙数据的编码
依据 DeviceListActivity回来的远端蓝牙设备的称号和地址,调用Bluetooth API树立蓝牙设备的衔接,当衔接树立完结后,便进入到了主功用模块。
首要在onCreat()函数中,完结了参数的初始化作业,初始化发送标志位SendFlag = 0,在此状况下,运用程序处于接纳数据的状况。摄像头中止收集图画信息,不进行发送数据。接着再初始化Button监听事情,运用程序中界说了两个Button,一个Button用来操控此Activity处于发送仍是接纳的状况;另一个Button用来操控是否对摄影功用予以呼应;
Activity处于发送状况时,将Camera收集到的每一帧数据进行处理,因为图片比较大,蓝牙发送的数据速率是有限的,为了确保接纳端接纳到的视频图画的连贯性,要对收集到的图片进行紧缩处理。调用Android API中 Matrix的postScale()办法,设置缩放份额,完结图片的缩放。
接下来数据部分要增加信息头,假如是摄影的操控信息,增加第1节中设定的TAKE_PHOTO 其值为数值 1;假如是相片信息,增加 DATA其值为数值 0。经过增加信息头,便完结了关于数据信息和操控信息的区别。最终进入到下一进程,对数据进行加密。
3.3 数据加密
数据加密选用RC4与RSA混合加密办法,再上一节中具体的予以论述。数据加密的流程如图5所示。
图5 数据加密流程图
在接纳端,线程一向等候蓝牙发送的数据,当读取到数据,便依据解密的办法,顺次去除加密信息。解密的次序与加密构成逆进程。解密流程如图6所示。
图6 数据解密流程图
关于解密出来的数据,要对其剖析判别数据的类型,依据自界说的蓝牙数据结构可知,数据的榜首位即为数据类型位。进行数据类型判别的首要程序如下所示:
switch(decr[0]) {
case TAKE_PHOTO:
mHandler.obtainMessage(MainActivity.MESSAGE_READ, -1,TAKE_PHOTO , buffer).sendToTarget();
break;
case DATA:
mHandler.obtainMessage(MainActivity.MESSAGE_READ, decr.length,DATA, decr).sendToTarget();
break;
}
经过以上3个进程,便完结了长途操控的功用。在实践运用中,其间一部手机作为被操控端,实时的将照相机收集到的数据发送到另一部手机。操控端实时显现接纳到的图画,当需求摄影相片时分,点击摄影按钮,即可完结长途操控的功用,完结相片的摄影,并将相片存储起来。
结语
本文完结了依据Android体系的蓝牙长途操控功用。极大的丰厚用户关于智能设备功用的需求。在数据传送的进程中,运用了混合加密算法对数据加密,确保了用户数据的安全以及确保了设备不被别人操控。在便利人们日子的一起也维护了用户的隐私。跟着智能可穿戴设备的开展,智能设备经过蓝牙彼此衔接和彼此操控的运用也会比较广泛,智能可穿戴设备的首要以搭载Android体系为主。本文中完结的长途操控摄影相片的功用,移植到手表端,中心的程序部分均不需求改动,在程序显现界面部分依据不同品种设备的分辨率进行相应的调整,便能完结经过蓝牙进行长途操控的功用。