您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 手机/mobile开发 > Android+2.0+蓝牙功能及RFCOMM、SDP简介
Android2.0蓝牙功能及RFCOMM、SDP简介一.Android2.0蓝牙功能简介Google于2009年10月28日发布了AndroidSDK2.0版本。对于开发人员来说,最关心的莫过于新版本添加了哪些新特性,API有哪些改动。2.0版本发布前,最受关注的就是能否在新版本中添加蓝牙功能。Google果然不负众望,在2.0版本中加入了蓝牙功能,使Android平台功能更加强大。蓝牙模块实现了以下功能:蓝牙的打开/关闭。设备和服务的探索。使用RFCOMM连接远程设备发送/接收数据。公布RFCOMM服务和监听接入的RFCOMM连接。新版本添加了android.bluetooth包。该包提供了一些用于管理蓝牙设备的功能类。蓝牙的APIs允许应用程序连接或断开headset(头戴式耳机),扫描其他蓝牙设备并与之配对。增强了写和修改本地服务发现协议(ServiceDiscoveryProtocol,SDP)数据库,查询其他蓝牙设备SDP数据库,在Android上建立RFCOMM通道/Socket,连接到其他设备指定Socket的控制。注意:不是所有的Android设备都能保证有蓝牙功能。下面是android.bluetooth包中类的简述:BluetoothAdapter代表本地蓝牙适配器。可以使用getDefaultAdapter()方法获得默认的本地蓝牙适配器。使用BluetoothDevice类在远程蓝牙设备上进行操作。BluetoothClass表示一个蓝牙类。蓝牙类是一个32位字段,这些位的格式定义在。这个类包含32位字段,提供常数和方法去确定在这个字段中编码的服务类和设备类(服务类可以有多个)。每个蓝牙类可组成零至多个服务类,确切的说是一个设备类。这个设备类进一步分解为主要和次要设备类组件。这个类通常用于表示一个设备(如在用户界面显示一个图标),但不能可靠的描述哪个蓝牙配置或服务被设备支持。精确的服务搜索是通过SDP请求得到的。.远程设备可以通过getBluetoothClass()方法检索这个类。BluetoothClass.Device蓝牙设备类。确切的说,每个BluetoothClass编码一个设备类,分为主要和次要组件。BluetoothClass.Device里的常量表示一个主设备和从设备的组合(即完整的设备类)BluetoothClass.Device.Major中的常量表示的只是主设备类。BluetoothClass.Device.Major参见BluetoothClass.DeviceBluetoothClass.Service蓝牙服务类。每个蓝牙类编码零至多个服务类。BluetoothDevice代表一个远程蓝牙设备。可以使用getRemoteDevice(String)方法创建一个BluetoothDevice.实际上这个类是一个蓝牙硬件地址的简单封装。这个类的对象是不变的。这个类的操作在远程蓝牙硬件地址上执行,可使用蓝牙适配器创建这个蓝牙设备。BluetoothServerSocket一个监听蓝牙的Socket。这个蓝牙Socket的接口类似于TCP的Sockets:Socket和ServerSocket.在服务端,使用一个BluetoothServerSocket创建一个监听socket.它会返回一个新的已接收连接的BluetoothSocket。在客户端,使用同样的BluetoothSocket对象去初始化输出连接和管理已连接的socket.最常见的蓝牙Socket类型是RFCOMM.RFCOMM是一个在蓝牙上建立的定向的流传输连接。又称为串行端口配置文件SerialPortProfile(SPP).使用createRfcommSocketToServiceRecord(UUID)去创建一个新的BluetoothSocket,用于一个输出连接到远程蓝牙设备。使用listenUsingRfcommWithServiceRecord(String,UUID)去创建一个用于监听的BluetoothServerSocket用于输入连接到本地BluetoothAdapter.BluetoothSocket和BluetoothServerSocket是线程安全的。特别要注意的是,close()方法会立即中断操作并关闭socket.BluetoothServerSocket中的所有方法都需要Manifest.permission的BLUETOOTH权限。BluetoothSocket一个已连接或正在连接的蓝牙端口。与服务端的连接参见BluetoothServerSocket。该类中的所有方法也都需要Manifest.permission的BLUETOOTH权限。Android蓝牙模型原理及设备之间的连接已再【eoeAndroid特刊】第六期中有所说明,在此不做赘述。详情请参见【eoeAndroid特刊】第六期4-6节。二.协议简述蓝牙规范(SpecificationoftheBluetoothSystem)就是蓝牙无线通信协议标准,它规定了蓝牙应用产品应遵循的标准和需要达到的要求。蓝牙协议规范遵循开放系统互连参考模型(OpenSystemInterconnetion/ReferencedModel,OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次。在蓝牙规范中,中介协议是为高层应用协议或程序在蓝牙逻辑链路上工作提供了必要的支持,为应用曾提供了各种不同的标准接口。这部分协议包括RFCOMM、SDP、IrDA、(PPP/IP/TCP/UDP)、(TCS/AT)等。2.1串口仿真协议(RFCOMM)基于欧洲电信标准化协会(EuropeanTelecommunicationStandardizationInstitute,ETSI)的TS07.10标准制定。该协议用于模拟串行接口环境,使得基于串口的传统应用仅作少量的修改或者不做任何修改可以直接在该层上运行。通过提供串行端口仿真,RFCOMM可以同时支持遗留串行端口应用程序以及其它应用程序中的OBEX协议。RFCOMM是ETSITS07.10标准的一个子集,也具有一些蓝牙特定的适配性。RFCOMM协议能在两台蓝牙设备之间同时维持多达60个连接。蓝牙设备中同时使用的连接数目取决于特定实施。由于有了RFCOMM,完整的通信路径包括两个运行在不同设备(通信端点)上的应用程序及它们之间的通信段。上图显示了完整的通信路径RFCOMM旨在覆盖利用串行端口设备的应用程序。在简单的配置中,通信段是一个设备至另一设置之间(直接连接)的蓝牙链路,参见下图。当通信段为另一网络时,蓝牙无线技术可作为设备和网络连接设备(例如调制解调器)之间的路径。RFCOMM仅与直接连接设备或网络环境中的设备和调制解调器之间的连接有关。2.2服务发现协议(ServiceDiscoveryProtocol,SDP)为实现蓝牙设备之间相互查询及访问对方提供的服务。服务发现应用是一个特定的由用户发起的应用。服务发现工作与两个在蓝牙设备中的SDP实例交互,其目的是使用某个特定的传输服务(RFCOMM)或者特定的用途(文件传输、无线电话、LANAP等)。SDP直接支持以下几种服务查询:1).通过服务类进行服务查询;2).通过服务属性对服务进行查询;3).服务浏览。一般的服务发现应用都被以上的三种服务查询所覆盖。其中前两个代表了查询已知或者指定的服务,并对类似“服务A是否有效?”或者“具有B和C特性的服务A是否有效?”的问题作出了回答。后面的服务浏览代表了另外一种服务查询,对类似“有效的服务有哪些?”或者“有效的类型A的服务有哪些”的问题给出解答。上面的服务查询段落可以被实现为两种方式:1).用户有意识地连接到某个设备,并查找这个设备上的服务;2).通过无意识地连接本地设备周围的设备,并执行服务查询。这两种实现方式都需要设备首先被发现、被连接、被查询它们所支持的服务。
本文标题:Android+2.0+蓝牙功能及RFCOMM、SDP简介
链接地址:https://www.777doc.com/doc-7027082 .html