PBAP是专门为蓝牙车载设备自动下载手机内的电话本定义的一套协议,它跟IrMC渊源挺深,据我了解,PBAP的电话本数据结构便是借鉴IrMC,采用文件的形式将同类型的电话号码条目组装在一起,它定义了五种文件-local phone电话本、sim卡电话本、dialed call、missed call、received call,这些文件有特定的文件名具体电话条目的封装采用VCARD(这个不算借鉴IrMC)。只是由于SyncML已经先入为主,IrMC最终没有被手机厂商和车载设备厂商接受而成为弃儿。PBAP对电话本同步操作进行了简化,只提供下载功能,而没有动态更新的功能,从而不用定义特别的命令,完全在OBEX之上采用GET命令便能实现,正因其简单,所以被大多数手机厂商所接受。
PBAP在OBEX上的适配非常简单,首先它把电话本文件封装为MIME类型为"x-bt/phonebook"的文件,而且文件名也已经固定好了,比如SIM卡的电话本文件为SIM1/telecom/pb.vcf。这样客户端(车载设备)和服务器端(手机)建立连接后,客户端发起GET命令,请求该类型的该文件便可以了。
连接时需要指定Target即连接OBEX的目的是用于PBAP操作,target为796135f0-f0c5-11d8-0966-0800200c9a66。
还有一个特殊的地方便是PABP可以设置MASK约定好vcard中含有的属性,比如需要N-名字、TEL-电话属性但不需要PHOTO这样的属性,可以通过该MASK设置,否则一个vcard中的PHOTO上M字节够受的。
所以可以把PBAP在OBEX上的适配归纳为:几个通用的Header-target,MIME type,filename,一个特殊的header-vcardfilter(即上述的MASK),加上GET操作,连PUT都用不到。正是因为各大手机厂商的OBEX做得已经很完善而PBAP在OBEX上的适配这么简单,PBAP才得到了大量的应用。