Android 2.0 蓝牙功能及RFCOMM、SDP简介

一.Android 2.0蓝牙功能简介

Google 于20091028日发布了Android SDK 2.0版本。对于开发人员来说,最关心的莫过于新版本添加了哪些新特性,API有哪些改动。2.0版本发布前,最受关注的就是能否在新版本中添加蓝牙功能。Google果然不负众望,在2.0版本中加入了蓝牙功能,使Android平台功能更加强大。蓝牙模块实现了以下功能:

· 蓝牙的打开/关闭。 

· 设备和服务的探索。 

· 使用RFCOMM连接远程设备发送/接收数据。 

· 公布RFCOMM服务和监听接入的RFCOMM连接。

新版本添加了android.bluetooth包。该包提供了一些用于管理蓝牙设备的功能类。蓝牙的APIs允许应用程序连接或断开headset(头戴式耳机),扫描其他蓝牙设备并与之配对。增强了写和修改本地服务发现协议(Service Discovery Protocol ,SDP)数据库,查询其他蓝牙设备SDP数据库,在Android上建立RFCOMM通道/Socket,连接到其他设备指定Socket的控制。 

注意:不是所有的Android设备都能保证有蓝牙功能。

下面是android.bluetooth包中类的简述:

BluetoothAdapter

代表本地蓝牙适配器。

可以使用 getDefaultAdapter() 方法获得默认的本地蓝牙适配器。 

使用 BluetoothDevice 类在远程蓝牙设备上进行操作。 

BluetoothClass

表示一个蓝牙类 

蓝牙类是一个32位字段,这些位的格式定义在http://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm 。这个类包含32位字段,提供常数和方法去确定在这个字段中编码的服务类和设备类(服务类可以有多个)。 

每个蓝牙类可组成零至多个服务类,确切的说是一个设备类。这个设备类进一步分解为主要和次要设备类组件。 

这个类通常用于表示一个设备(如在用户界面显示一个图标),但不能可靠的描述哪个蓝牙配置或服务被设备支持。精确的服务搜索是通过SDP请求得到的。 

.远程设备可以通过getBluetoothClass()方法检索这个类。

BluetoothClass.Device

蓝牙设备类。确切的说,每个 BluetoothClass 编码一个设备类,分为主要和次要组件。 

BluetoothClass.Device 里的常量表示一个主设备和从设备的组合(即完整的设备类)BluetoothClass.Device.Major 中的常量表示的只是主设备类。 

BluetoothClass.Device.Major

 参见BluetoothClass.Device

BluetoothClass.Service

蓝牙服务类。 每个蓝牙类编码零至多个服务类。

BluetoothDevice

代表一个远程蓝牙设备。可以使用 getRemoteDevice(String) 方法创建一个BluetoothDevice. 

实际上这个类是一个蓝牙硬件地址的简单封装。这个类的对象是不变的。这个类的操作在远程蓝牙硬件地址上执行,可使用蓝牙适配器创建这个蓝牙设备。 

BluetoothServerSocket

一个监听蓝牙的Socket。这个蓝牙Socket的接口类似于TCPSockets: Socket  ServerSocket. 在服务端,使用一个BluetoothServerSocket 创建一个监听socket. 它会返回一个新的已接收连接的BluetoothSocket 。在客户端,使用同样的BluetoothSocket 对象去初始化输出连接和管理已连接的socket. 

最常见的蓝牙Socket类型是RFCOMM. RFCOMM 是一个在蓝牙上建立的定向的流传输连接。又称为串行端口配置文件Serial Port Profile (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节。

二.协议简述

蓝牙规范(Specification of the Bluetooth System)就是蓝牙无线通信协议标准,它规定了蓝牙应用产品应遵循的标准和需要达到的要求。蓝牙协议规范遵循开放系统互连参考模型(Open System Interconnetion/Referenced Model, OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次。

在蓝牙规范中,中介协议是为高层应用协议或程序在蓝牙逻辑链路上工作提供了必要的支持,为应用曾提供了各种不同的标准接口。这部分协议包括RFCOMMSDPIrDA、(PPP/IP/TCP/UDP)、(TCS/AT)等。

  

  2.1 串口仿真协议(RFCOMM

  

基于欧洲电信标准化协会(European Telecommunication Standardization Institute, ETSI)的TS07.10标准制定。该协议用于模拟串行接口环境,使得基于串口的传统应用仅作少量的修改或者不做任何修改可以直接在该层上运行。

通过提供串行端口仿真,RFCOMM 可以同时支持遗留串行端口应用程序以及其它应用程序中的 OBEX 协议。RFCOMM 是 ETSI TS 07.10 标准的一个子集,也具有一些蓝牙 特定的适配性。

RFCOMM 协议能在两台蓝牙设备之间同时维持多达 60 个连接。蓝牙设备中同时使用的连接数目取决于特定实施。

 

 

由于有了 RFCOMM,完整的通信路径包括两个运行在不同设备(通信端点)上的应用程序及它们之间的通信段。上图显示了完整的通信路径

RFCOMM 旨在覆盖利用串行端口设备的应用程序。在简单的配置中,通信段是一个设备至另一设置之间(直接连接)的蓝牙链路,参见下图。当通信段为另一网络时,蓝牙无线技术可作为设备和网络连接设备(例如调制解调器)之间的路径。RFCOMM 仅与直接连接设备或网络环境中的设备和调制解调器之间的连接有关。

 

 

  2.2 服务发现协议(Service Discovery ProtocolSDP

  

为实现蓝牙设备之间相互查询及访问对方提供的服务。服务发现应用是一个特定的由用户发起的应用。服务发现工作与两个在蓝牙设备中的SDP实例交互,其目的是使用某个特定的传输服务(RFCOMM)或者特定的用途(文件传输、无线电话、LAN AP等)。

SDP直接支持以下几种服务查询:

1).通过服务类进行服务查询;
2).通过服务属性对服务进行查询;
3).服务浏览。

一般的服务发现应用都被以上的三种服务查询所覆盖。其中前两个代表了查询已知或者指定的服务,并对类似“服务A是否有效?”或者“具有BC特性的服务A是否有效?”的问题作出了回答。后面的服务浏览代表了另外一种服务查询,对类似“有效的服务有哪些?”或者“有效的类型A的服务有哪些”的问题给出解答。

上面的服务查询段落可以被实现为两种方式:

1).用户有意识地连接到某个设备,并查找这个设备上的服务;

2).通过无意识地连接本地设备周围的设备,并执行服务查询。
这两种实现方式都需要设备首先被发现、被连接、被查询它们所支持的服务。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值