Android BluetoothObex

一、OBEX介绍

OBEX全称为Object Exchange,中文对象交换,所以称之为对象交换协议。它在此软件当中有着核心地位,文件传输和IrMC同步都会使用到它。OBEX v2.0蓝牙协议层次结构图:

OBEX可以用来传输vCard(电话本),vCalendar(电子日历),vMessage(短信和email)和vNotes(电子笔记)。

OBEX Object

OBEX协议定义了一种柔性的概念——objects。也即是对象。这些对象可以包括文件,诊断信息,电子商务卡片,银行的存款等等。Objects在这里没有高级的技术含义,而是视你的应用而定。

OBEX Object模型描述的是如何表示OBEX Object,OBEX协议可以使用Put-和Get-operations传输Object。一个object可以通过一个或者多个Put-requests、 Get-responses进行交互。Object是由headers组成的,header由header ID和header value组成。通过Header ID可以确定header的格式及包含哪些信息,header value由一个或者多个字节组成,其格式和含义由header ID决定。目前定义的header有:

header ID

header name

描述

0xC0

Count

连接中用于指名对象的数量。

0x01

Name

对象的名字。一般为文件名。

0x42

Type

对象的类型。例如text,html,binary,manufacture specific

0x44

0xC4

Time

时间戳。ISO 8601版本 时间戳。4Byte版本(用于兼容)

0x05

Description

对对象的文本描述

0x46

Target

操作的目的服务名

0x47

HTTP

一个HTTP1.x头

0x48

Body

对象的一部分

0x49

End of body

对象的最后一部分

0x4A

Who

OBEX Application标识,用于表明是否是同一个应用。

0xCB

Connection ID

用于OBEX多路连接的标识

0x4C

App.Parameters

扩展的应用层请求和回复信息

0x4D

Auth.Challenge

Authentication digest-challenge

0x4E

Auth.Response

Authentication digest-response

0x4F

Object Class

对象的OBEX对象类

0x10 to 0x2F

Reserved

保留

0x30 to 0x3F

User defined

用户自定义的。

Session Protocol(会话协议)

OBEX协议是典型的client/server request-response模型。OBEX操作由request-response对组成。Request由client发出的,response由server发出的。Client发送一个request后,需要在收到来自server的response之后才能发送新的request。但是当启动OBEX Single Response Mode (SRM)时执行Put或者Get操作的时候也有例外的情况,在这种情况下,为了提高OBEX的吞吐量会忽略标准的request-response序列。

OBEX使用Request和Response作为最基本的操作。请求的每个Request必然有一个Response,否则可认为Request失败。Request由一个或多个的Packet(包)组成:

Byte0Bytes1、2Bytes3 ot n

操作码(opcode)

Packet Length(包长度)

Headers或请求信息

Request code定义如下:

Response code定义如下:

二、OBEX相关接口

Authenticator

此接口提供了一种响应身份验证质询和身份验证响应标头的方法。

Authenticator代码位于:

external/obex/src/com/android/obex/Authenticator.java

Authenticator的定义:

public interface Authenticator {
    PasswordAuthentication onAuthenticationChallenge(String description, boolean isUserIdRequired, boolean isFullAccess);
    byte[] onAuthenticationResponse(byte[] userName);
}

Operation

Operation 接口提供了操作单个 OBEX PUT 或 GET 操作的方法。

Operation代码位于:

external/obex/src/com/android/obex/Operation.java

Operation的定义:

public interface Operation {
    void abort() throws IOException;
    HeaderSet getReceivedHeader() throws IOException;
    void sendHeaders(HeaderSet headers) throws IOException;
    int getResponseCode() throws IOException;
    int getHeaderLength();
    InputStream openInputStream() throws IOException;
    DataInputStream openDataInputStream() throws IOException;
    OutputStream openOutputStream() throws IOException;
    DataOutputStream openDataOutputStream() throws IOException;
    void close() throws IOException;
    int getMaxPacketSize();
    public void noBodyHeader();
}

ObexTransport

ObexTransport 接口定义了承载 OBEX 协议的底层传输连接(例如 TCP、内核中蓝牙或 USB 公开的 RFCOMM 设备文件、Android 平台中模拟的 RFCOMM 套接字、Irda)。

ObexTransport代码位于:

external/obex/src/com/android/obex/ObexTransport.java

ObexTransport的定义:

public interface ObexTransport {
    void create() throws IOException;
    void listen() throws IOException;
    void close() throws IOException;
    void connect() throws IOException;
    void disconnect() throws IOException;
    InputStream openInputStream() throws IOException;
    OutputStream openOutputStream() throws IOException;
    DataInputStream openDataInputStream() throws IOException;
    DataOutputStream openDataOutputStream() throws IOException;
    int getMaxTransmitPacketSize();
    int getMaxReceivePacketSize();
    boolean isSrmSupported();
}

三、OBEX相关类

BluetoothObexTransport

通用 Obex 传输类,用于基于 OBEX 的蓝牙配置文件。

BluetoothObexTransport代码位于:

packages/modules/Bluetooth/android/app/src/com/bluetooth/BluetoothObexTransport.java

BluetoothObexTransport的定义:

public class BluetoothObexTransport implements ObexTransport {}

ObexAppParameters

Android ObexAppParameters是一个用于解析数据的类,用于解析Obex数据。

ObexAppParameters代码位于:

packages/modules/Bluetooth/android/app/src/com/bluetooth/pbapclient/ObexAppParameters.java

packages/modules/Bluetooth/android/app/src/com/bluetooth/mapclient/obex/ObexAppParameters.java

ObexAppParameters的定义:
 

public final class ObexAppParameters {}

ClientSession

Android中的ClientSession和ServerSession是用于在蓝牙传输中进行客户端和服务器端的通信的类。它用于管理蓝牙传输会话的创建、启动和终止。ClientSession是用于在客户端发送请求和接收响应类。它负责与服务器建立连接,并发送请求以获取所需的数据。在Android中,可以使用BluetoothSocket来创建ClientSession,并使用其提供的方法发送和接收数据。

ClientSession代码位于:

external/obex/src/com/android/obex/ClientSession.java

ClientSession的定义:

public final class ClientSession extends ObexSession {}

ServerSession

Android中的ClientSession和ServerSession是用于在蓝牙传输中进行客户端和服务器端的通信的类。

ServerSession代码位于:

external/obex/src/com/android/obex/ServerSession.java

ServerSession的定义:

public final class ServerSession extends ObexSession implements Runnable {}

ObexSession

Android ObexSession是用于在Android设备上进行OBEX(对象交换协议)通信的类。它提供了建立和管理OBEX会话的功能。

ObexSession代码位于:

external/obex/src/com/android/obex/ObexSession.java

ObexSession的定义:

public class ObexSession {}

ObexHelper

此类定义了一组用于实现 Obex 的帮助程序方法。

ObexHelper代码位于:

external/obex/src/com/android/obex/ObexHelper.java

ObexHelper的定义:

public final class ObexHelper {}

HeaderSet

此类为基于 RFCOMM 的 OBEX 或基于 l2cap 的 OBEX 实现 com.android.obex.HeaderSet 接口。

HeaderSet代码位于:

external/obex/src/com/android/obex/HeaderSet.java

HeaderSet的定义:

public final class HeaderSet {}

PasswordAuthentication

此类包含用户名和密码组合。

PasswordAuthentication代码位于:

external/obex/src/com/android/obex/PasswordAuthentication.java

PasswordAuthentication的定义:

public final class PasswordAuthentication {}

ServerRequestHandler

ServerRequestHandler类定义一个事件侦听器,该侦听器将响应向服务器发出的 OBEX 请求。

ServerRequestHandler代码位于:

external/obex/src/com/android/obex/ServerRequestHandler.java

ServerRequestHandler的定义:

public class ServerRequestHandler {}

ServerOperation

此类实现服务器端连接的 Operation 接口。

ServerOperation代码位于:

external/obex/src/com/android/obex/ServerOperation.java

ServerOperation的定义:

public final class ServerOperation implements Operation, BaseStream {}

PrivateInputStream

此对象为此包中使用的 Operation 对象提供输入流。

PrivateInputStream代码位于:

external/obex/src/com/android/obex/PrivateInputStream.java

PrivateInputStream的定义:

public final class PrivateInputStream extends InputStream {}

PrivateOutputStream

此对象为此包中使用的 Operation 对象提供输出流。

PrivateOutputStream代码位于:

external/obex/src/com/android/obex/PrivateOutputStream.java

PrivateOutputStream的定义:

public final class PrivateOutputStream extends OutputStream {}
  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值