Android应用开发项目式教程 课件 项目7、8 蓝牙小车-蓝牙通信、智能家居-网络通信_第1页
Android应用开发项目式教程 课件 项目7、8 蓝牙小车-蓝牙通信、智能家居-网络通信_第2页
Android应用开发项目式教程 课件 项目7、8 蓝牙小车-蓝牙通信、智能家居-网络通信_第3页
Android应用开发项目式教程 课件 项目7、8 蓝牙小车-蓝牙通信、智能家居-网络通信_第4页
Android应用开发项目式教程 课件 项目7、8 蓝牙小车-蓝牙通信、智能家居-网络通信_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目7蓝牙小车——蓝牙通信本项目学习任务Android经典蓝牙API的使用Android低功耗蓝牙API的使用1.Android经典蓝牙API的使用蓝牙技术是一种低成本低功耗的近距离无线通信技术,能为手机、无线耳机、笔记本电脑及相关外设之间进行无线信息交换。蓝牙Bluetooth2两个蓝牙设备通信时,必须一个为主角色,一个为从角色。当一个蓝牙设备以主角色发起通信时,需要知道对方的地址、配对密码等信息蓝牙通信的一般步骤如下:启动蓝牙设备扫描附近设备连接设备发送指令/接收指令关闭连接蓝牙通信的步骤BluetoothBluetoothAdapter:本地蓝牙适配器,是所有蓝牙交互的入口点,表示蓝牙设备自身的一个蓝牙设备适配器,整个系统只有一个蓝牙适配器。通过它可以发现其他蓝牙设备,查询绑定(配对)设备的列表,使用已知的Mac地址实例化BluetoothDevice以及创建BluetoothServerSocket用来侦听来自其他设备的通信。BluetoothDevice:表示远程的蓝牙设备,利用它可以通过BluetoothSocket请求与某个远程设备建立连接,或查询有关该设备的信息,例如设备的名称、地址、绑定状态等。蓝牙开发的主要类BluetoothBluetoothSocket:表示蓝牙套接字接口(与TCPSocket相似),Android应用可通过InputStream和OutputStream与其他蓝牙设备交换数据。BluetoothServerSocket:表示用于侦听传入请求的服务器套接字(类似于TCPServerSocket),要连接两台Android设备,其中一台设备必须使用此类开发一个服务器套接字。当一台远程蓝牙设备向此设备发出连接请求时,BluetoothServerSocket将会在接受连接后返回已连接的BluethoothSocket。蓝牙开发的主要类Bluetooth获取本地蓝牙适配器BluetoothAdaptermBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();打开/关闭手机蓝牙打开手机蓝牙:mBluetoothAdapter.enable();关闭手机蓝牙:mBluetoothAdapter.disable();扫描/取消蓝牙设备扫描蓝牙设备:mBluetoothAdapter.startDiscovery();取消扫描蓝牙设备,减少资源的消耗:mBluetoothAdapter.cancelDiscovery();蓝牙相关操作Bluetooth添加蓝牙广播接受者:

IntentFilterfilter=newIntentFilter(); //开始扫描的广播

filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); //扫描完成的广播

filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); //发现一个可用的设备的广播

filter.addAction(BluetoothDevice.ACTION_FOUND); mBluetoothReceiver=newBluetoothReceiver(); //注册监听

registerReceiver(mBluetoothReceiver,filter);蓝牙相关操作Bluetooth蓝牙广播接受者蓝牙相关操作Bluetooth注销广播接受者蓝牙相关操作Bluetooth连接设备蓝牙相关操作Bluetooth发送数据蓝牙相关操作Bluetooth接收数据蓝牙相关操作Bluetooth2.Android低功耗蓝牙API的使用低功耗蓝牙低功耗蓝牙,是蓝牙技术联盟设计和销售的一种个人局域网技术,相较经典蓝牙,低功耗蓝牙在保持同等通信范围的同时显著降低功耗和成本。这一特性使得Android应用程序能够与一系列对能耗有着严格要求的BLE设备(如智能手环、蓝牙耳机、近程传感器、心率监测器等)进行高效通信。此外,BLE除了广泛应用于邻近设备间进行少量的数据传输之外,还可以与近程传感器进行交互,为其当前所处位置提供个性化的服务。低功耗蓝牙Android应用中低功耗蓝牙通信的流程与经典蓝牙通信流程类似,但是它们所使用的API并不完全相同。在Android4.3版本(API级别18)中,对蓝牙低功耗(BLE)技术引入了内置系统支持,并提供相应的API,使得应用程序可以方便地发现设备、查询服务和传输信息。注意:当用户利用蓝牙低功耗(BLE)将其Android设备与其他设备进行配对时,用户设备上的所有应用程序均可访问这两个设备间传输的数据,可在应用层对数据进行编码加密,以确保数据安全性。关键术语和概念通用属性配置文件(GATT)——GATT被视为一种通用的规范,其主要内容是针对在BLE链路上发送和接收简短数据片段的特性,这些数据片段被称为“属性”。当前,所有低功耗应用配置文件均以GATT为基础。蓝牙特别兴趣小组(BluetoothSIG)为低功耗设备定义了多种配置文件。这些配置文件作为描述设备在特定应用中如何工作的规范,具有极为重要的意义。请注意,一台设备可以实现多个配置文件。例如,一台设备可能同时包含用于监测心率和电池电量的应用。关键术语和概念在BLE连接中,存在两种核心角色:中央设备(Central)和外围设备(Peripheral)。在建立连接的过程中,中央设备负责扫描和寻找可连接的外围设备,而外围设备则负责广播自身以供中央设备发现。在BLE连接中,必须有一个设备扮演中央角色,另一个设备扮演外围角色。当两个蓝牙设备建立连接后,它们使用GATT(GenericAttributeProfile)协议进行通信。在GATT协议中,存在两种核心角色:GATT服务器(GATTServer)和GATT客户端(GATTClient)。在建立连接后,这两个角色决定了两个设备如何相互通信。Android中BLE蓝牙的使用(1)配置BLE使用权限BLE蓝牙的使用需要在AndroidManifest中配置一些权限,常见的蓝牙权限配置如下:<uses-permissionandroid:name="android.permission.BLUETOOTH"/>

<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permissionandroid:name="android.permission.BLUETOOTH_CONNECT"/>

<uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"/>

上述权限中,BLUETOOTH是使用蓝牙的权限,BLUETOOTH_ADMIN是启动设备发现或操纵蓝牙的权限。BLE蓝牙通常与位置相关联,因此经常需要声明ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限。此外,还有蓝牙连接BLUETOOTH_CONNECT和蓝牙扫描BLUETOOTH_SCAN的权限。如果需要声明应用仅适用于支持BLE的设备,需要在AndroidManifest中添加以下内容:<uses-featureandroid:name="android.hardware.bluetooth_le"android:required="true"/>

如果希望应用适用于不支持BLE的设备,则仍将此元素添加到应用清单中,但设置required="false"。Android中BLE蓝牙的使用(2)启用BLE启用BLE首先要获取BluetoothAdapter,BluetoothAdapter是Android设备自身的蓝牙适配器,整个系统有一个蓝牙适配器。可以使用getSystemService()返回BluetoothManager的实例,然后使用该实例获取适配器。然后调用isEnabled(),检查当前是否已启用蓝牙。如果此方法返回false,则表示蓝牙处于停用状态。如果并未启用,则提示用户前往“Settings”启用蓝牙。Android中BLE蓝牙的使用(3)查找BLE设备查找BLE设备可以使用startLeScan()方法,此方法将LeScanCallback作为参数。在LeScanCallback回调方法中会返回扫描的结果。扫描非常耗电,建议找到所需设备后,立即停止扫描。此外,不要进行循环扫描,并设置扫描时间限制。如果需要扫描特定类型的外围设备,则可调用startLeScan(UUID[],BluetoothAdapter.LeScanCallback),它会提供一组UUID对象,用于指定应用支持的GATT服务。Android中BLE蓝牙的使用(4)连接到GATT服务器在与BLE设备进行交互之前,首先需要连接到GATT服务器,主要是蓝牙BLE设备上特定的GATT服务器。Android应用可以使用connectGatt()方法来进行连接,该方法需要三个参数:一个Context对象、autoConnect(布尔值,用于指示是否在可用时自动将我们连接到的BLE设备)以及BluetoothGattCallback。Android应用在此扮演了GATT客户端的角色。BluetoothGattCallback用于向客户端传递结果(例如连接状态)以及GATT客户端的进一步操作。Android中BLE蓝牙的使用(5)读取BLE属性当Android应用成功连接到GATT服务器并发现服务后,应用便可读取和写入属性。(6)接收GATT通知BLE应用通常会要求BLE设备上的特定特征发生变化时收到通知。使用setCharacteristicNotification()方法可以设置特征变化的通知。在启用针对特定特性的通知后,一旦远程设备上的该特性发生更改,就会触发onCharacteristicChanged()回调函数。(7)关闭客户端应用在应用程序完成对BLE设备的使用后,应调用close()方法,以便系统可以适当地释放资源。感谢观看Thankyou项目8智能家居——网络通信本项目学习任务TCP通信HTTP通信1.TCP通信的原理TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,保证了两台计算机之间可靠无差错的数据传输。TCP协议传送速度较慢,但传送的数据比较可靠。由于TCP协议的面向连接特性,它可以保证传输数据的安全性和完整性,所以是一个被广泛采用的协议,例如在下载文件时,如果数据接收不完整,将会导致文件数据丢失而不能被打开,因此,下载文件时必须采用TCP协议。网络编程基础TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端则都需要创建Socket对象。TCP通信与UDP通信的其中一个主要区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据;而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端。TCP通信JDK中提供了ServerSocket类,表示服务器端;Socket类表示客户端。通信时,首先要创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接;然后创建代表客户端的Socket对象,并向服务器端发出连接请求,服务器端响应请求,两者建立连接后可以正式进行通信。2TCP通信ServerSocket()该构造方法在创建ServerSocket对象时并没有指定端口号,使用时还需要调用bind(SocketAddressendpoint)方法将其绑定到指定的端口号上。ServerSocket(intport)该构造方法在创建ServerSocket对象时,可以绑定到指定的端口号上。如果port参数值为0,此时系统就会分配一个未被其他程序占用的端口号。由于客户端需要根据指定的端口号来访问服务器端程序,因此端口号随机分配的情况并不常用,通常都会给服务器端指定一个端口号。ServerSocket——常用构造方法TCP通信ServerSocket——常用方法方法声明功能描述Socketaccept()该方法用于等待客户端的连接,在客户端连接之前一直处于阻塞状态,如果有客户端连接就会返回一个与之对应的Socket对象InetAddressgetInetAddress()该方法用于返回一个InetAddress对象,该对象中封装了ServerSocket绑定的IP地址booleanisClosed()该方法用于判断ServerSocket对象是否为关闭状态,如果是关闭状态则返回true,反之则返回falsevoidbind(SocketAddressendpoint)该方法用于将ServerSocket对象绑定到指定的IP地址和端口号,其中参数endpoint封装了IP地址和端口号TCP通信Socket()该构造方法在创建Socket对象时,并没有指定IP地址和端口号,创建对象后还需调用connect(SocketAddressendpoint)方法,才能完成与指定服务器端的连接,其中参数endpoint用于封装IP地址和端口号。Socket(Stringhost,intport)该构造方法在创建Socket对象时,会根据参数去连接在指定地址和端口上运行的服务器程序,其中参数host接收的是一个字符串类型的IP地址。Socket(InetAddressaddress,intport)该方法在使用上与第2个构造方法类似,参数address用于接收一个InetAddress类型的对象,该对象用于封装一个IP地址。Socket——常用构造方法TCP通信Socket——常用方法方法声明功能描述intgetPort()该方法用于返回此Socket连接的远程服务端的端口号InetAddressgetLocalAddress()该方法用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回voidclose()该方法用于关闭Socket连接,结束本次通信。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,这是因为一个良好的程序应该在执行完毕时释放所有的资源InputStreamgetInputStream()该方法返回一个InputStream类型的输入流对象。如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据;反之,用于读取服务器端发送的数据OutputStreamgetOutputStream()该方法返回一个OutputStream类型的输出流对象。如果该对象是由服务器端的Socket返回,就用于向客户端发送数据;反之,用于向服务器端发送数据TCP通信服务端与客户端通信图:TCP通信基于TCP协议的Socket通信的步骤:服务器:1、创建ServerSocket,绑定一个监听端口2、通过accept()方法监听客户端请求3、建立连接后,通过输入流读取客户端数据,通过输出流向客户端发送数据4、关闭输入/输出流,关闭Socket客户端:1、创建Socket,需要指明服务器的IP地址和端口号2、建立连接后,通过输出流向服务器发送数据,通过输入流读取服务器的响应信息3、关闭输入输出流,关闭SocketTCP通信2.HTTP通信HTTP简介HTTP全称为超文本传输协议(HypertextTransferProtocol),是一种用于传输超文本(如网页)的协议。它是在互联网上应用最广泛的一种网络协议。HTTP的工作方式是基于请求和响应的模型。在一个HTTP请求-响应周期中,一个客户端(如一个浏览器)会向服务器发送一个请求,这个请求可以包含一个获取特定资源(如一个网页)的请求,也可以是提交其他类型数据的请求(如POST请求)。当服务器收到这个请求后,它会处理这个请求并返回一个响应。这个响应可以是一个网页的内容,也可以是其他类型的数据,如错误消息或重定向指令等。HTTP简介HTTP为浏览器和App们提供了一个统一的接口,大量的App都在使用HTTP及其相关协议,确保网页和App能方便的进行通信。HTTP通常使用URL(UniformResourceLocator,统一资源定位地址)来请求数据或提交信息。URL是指向互联网资源的指针,资源可以是简单的文件或目录,也可以是对更复杂的对象的引用,例如对数据库或搜索引擎的查询。通常情况下,URL由协议名、主机、端口和资源组成,其格式为:protocal://host:port/resourceName。HTTP简介在客户端与服务器进行网络通信的过程中,通常需要提供一些参数以指定所需访问的资源,不同的参数会导致请求不同的资源。在HTTP协议中,常用的请求类型主要有两种,即GET和POST。这两种请求类型在技术上的差异主要体现在浏览器或客户端在处理和封装请求信息时的方式上。HTTP简介GET方法通常用于从服务器获取资源,这种请求不会对服务器上的数据造成任何更改。在这种情况下,参数的主要作用是告知服务器哪些数据可以提供作为响应。这些参数被附加到请求的URL后面。使用GET方法发送的URL长度通常不能超过1KB。在HTML页面中,资源链接通常使用GET方法作为典型的实现方式。当使用POST请求方法提交数据时,所提交的数据以键值对的形式被封装在请求的实体中。这种做法使得用户无法通过浏览器直接查看发送的请求数据。因此,POST方式在安全性方面要比GET方式更为优越。POST请求具有修改服务器端资源内容的能力,例如处理表单、上传文件等情况。HTTP简介在请求过程中,提供给服务器的参数分为两种主要类型:请求参数和控制参数。请求参数是与特定的业务和内容相关的信息,例如网络服务器的地址,它作为请求参数提供了服务器可达的地址信息。除此之外,附加的查询字符串以及使用POST方式进行访问时所附加的参数等也属于请求参数的范畴。控制参数则主要用于从技术角度对访问过程进行控制,如设置访问超时时间、指定内容编码格式、向服务器提供当前访问客户端的类型等信息,都可以被归类为控制参数。HTTP简介Android平台为HTTP通信提供了全面的支持,通过标准的Java类HttpURLConnection来实现基于URL的请求和响应功能。HttpURLConnection继承自URLConnection类,它可以发送和接收各种类型和长度的数据,同时也可以灵活地设置请求方法、超时时间等参数。HTTP简介在真实的开发过程中,当手机端与服务器端进行交互时,不可避免地需要将中文数据提交到服务器,此时可能会出现中文乱码的问题。无论使用GET还是POST方法提交参数,都需要对参数进行编码。至关重要的是,编码方式必须与服务器端的解码方式保持一致。同样,在获取服务器返回的中文字符时,也需要使用特定的解码格式进行解码。HTTP的数据解析与显示HTTP请求后返回的数据有多种类型,常见的有HTML、JSON、XML、纯文本、图片、适配、PDF等。HTML网页的显示HTML网页是HTTP请求后返回的最常见的数据类型,Android提供了WebView控件来解析和显示网页。WebView控件和其他控件类似,可以直接在XML布局文件中添加,也可以在Java代码中添加。HTML网页的显示WebView控件的常用方法有:loadUrl(Stringurl):加载URL对应的网页。loadData(Stringdata,StringmimeType,Stringencoding):将指定的字符串数据加载到浏览器中。capturePicture():创建当前屏幕的快照。goBack():执行后退操作。goForward():执行前进操作。stopLoading():停止加载当前页面。reload():重新加载当前页面。zoomIn():放大网页。zoomOut():缩小网页。addJavascriptInterface(Objectobject,Stringname):使用WebView中的JavaScript调用Android方法。JSON数据的解析Android应用很多时候不需要显示网页,只需要获取数据,将数据适配到Android的控件上。HTTP请求获取的数据类型很多时候是JSON类型,JSON是一种新的数据格式,是一种轻量级的数据交互格式,JSON的文件拓展名一般为.json。JSON可以传输一个简单的数据,也可以传输数组或对象。JSON数据有两种结构,分别是对象结构和数组结构。JSON数据的解析(1)对象结构对象结构以“{”开始,以“}”结束,中间部分由以“,”分隔的键值对(key:value)构成,最后一个键值对后边不用加“,”,键(key)和值(value)之间以“:”分隔,以下是一个对象结构的JSON数据示例:

上述JSON是一个对象结构,有三个键值对,其中“city”的值为“Suzhou”,“temp”的值为26,“weather”的值为“cloudy”。{"city":"Suzhou","temp":2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论