android蓝牙pbap详解,蓝牙pbap协议源码解析

更新时间:2023-05-25 08:59:01 阅读: 评论:0

android蓝⽛pbap详解,蓝⽛pbap协议源码解析
PBAP协议
使⽤场景:智能车载中同步联系⼈等信息
其实,不仅可以同步联系⼈,还可以同步通话记录等信息。
1.协议概述
协议代码路径:
frameworks\opt\bluetooth\src\android\bluetooth\client\pbap这个包中
Jar包名称,android.bluetooth.client. pbap
所以进⾏开发时,在mk⽂件中需要添加这个包,
并且,在AndroidManifest⽂件中必须导⼊Obex库,
pbap这个包中⽂件如下,
使⽤pbap协议同步联系⼈/通话记录时的开发流程和其他的协议不⼀样,并且pbap协议只有客户端,没有服务端. BluetoothPbapClient是其客户端,在此先不看其客户端的⽅法。
2开发步骤
1) 构造BluetoothPbapClient对象,
2) 调⽤BluetoothPbapClient对象⽅法,处理对应的回调消息。
3详细开发过程
3.1构造BluetoothPbapClient
BluetoothPbapClient如何构造呢?源码有2个构造⽅法,其中⼀种如下 ,
public BluetoothPbapClient(BluetoothDevice device, Handler handler) {
mClientHandler = handler;
authorityoriented
mSessionHandler = new SessionHandler(this);
addSdp();paradi歌词
mSession = new BluetoothPbapSession(device, mSessionHandler);
}
从中可以看到,构造⽅法有2个参数, device当然是远程蓝⽛设备了,这个很容易获取,
另外⼀个Handler对象,主要⽤于⼀些消息的回调,那就先新建⼀个Handler对象。
所以可以很简单的进⾏构造,
mPbapClient = new BluetoothPbapClient(device, mPbapHandler);
3.2⽅法以及回调处理
客户端BluetoothPbapClient的主要⽅法以及对应的回调消息如下,
⽅法
回调消息
tPhoneBookFolderRoot
刷选同步条件/
根⽬录/⼦⽬录/⽗⽬录
EVENT_SET_PHONE_BOOK_DONE
tPhoneBookFolderUp
tPhoneBookFolderDown
pullPhoneBookSize
电话本⼤⼩
EVENT_PULL_PHONE_BOOK_SIZE_DONE
pullVcardListingSize
⽂件数量
banditsEVENT_PULL_VCARD_LISTING_SIZE_DONE
pullPhoneBook
同步电话本
EVENT_PULL_PHONE_BOOK_DONE
pullVcardListing
同步⽂件
EVENT_PULL_VCARD_LISTING_DONE
pullVcardEntry
同步单个⽂件
EVENT_PULL_VCARD_DONE
BluetoothPbapClient⼀些字符串定义如下,
public static final String ICH_PATH = "telecom/ich.vcf"; // ⼿机来电记录
public static final String OCH_PATH = "telecom/och.vcf"; // ⼿机去电记录public static final String MCH_PATH = "telecom/mch.vcf";// ⼿机未接电话记录public static final String CCH_PATH = "telecom/cch.vcf"; // 所有通话记录public static final String PB_PATH = "telecom/pb.vcf"; // ⼿机联系⼈
对应的SIM卡上的通话记录以及联系⼈路径如下,
public static final String SIM_ICH_PATH = "SIM1/telecom/ich.vcf"; public static final String SIM_OCH_PATH = "SIM1/telecom/och.vcf"; public static final String SIM_MCH_PATH = "SIM1/telecom/mch.vcf"; public static final String SIM_CCH_PATH = "SIM1/telecom/cch.vcf"; public static final String SIM_PB_PATH = "SIM1/telecom/pb.vcf";
同步联系⼈的详细开发如下,
设置路径,调⽤pullPhoneBook⽅法,
private String mDownloadSpinner = "telecom/pb.vcf";
mPbapClient. pullPhoneBook(mDownloadSpinner);
回调处理
英文翻译网站ArrayListpullPhoneBook; // 保存同步的联系⼈
private final Handler mPbapHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
ca BluetoothPbapClient.EVENT_PULL_PHONE_BOOK_DONE: pullPhoneBook = (ArrayList) msg.obj;
break;
2018高考英语
}
};
到此, pullPhoneBook就保存了同步的联系⼈,后续就可以进⾏处理了。
同样的,也可以设置其他路径以⽅法同步通话记录等。ArrayListpullVcardListing = null; // 保存同步⽂件
VCardEntry pullVcardEntry = null; // 保存同步单个⽂件
homicide4流程图
同步的⽅法调⽤流程⼏乎是⼀模⼀样的,所以以pullPhoneBook⽅法为例,
流程图很简单,没有跨进程通信,只是单开⼀个线程同步联系⼈,每个联系⼈对应⼀个VCardEntry对象。VCardEntry对象在VCardEntryConstructor类中创建,在BluetoothPbapVcardList的内部类CardEntryHandler的onEntryCreated⽅法添加到名为mCards的ArrayList中。同步完之后, BluetoothPbapClient中的SessionHandler对象⾸先获取mCards,然后通过
EVENT_PULL_PHONE_BOOK_DONE消息将mCards(VCardEntry数组)发出,因此在开发时处理该消息就可以获取同步的联系⼈。
5 VCardEntry简析
VCardEntry可以保存联系⼈/通话记录的各种信息,看枚举EntryLabel
public enum EntryLabel {
NAME,
PHONE,
EMAIL,
POSTAL_ADDRESS,
ORGANIZATION,
IM,
PHOTO,
人力资源薪酬管理WEBSITE,
SIP,
NICKNAME,
波纹的拼音NOTE,
BIRTHDAY,
ANNIVERSARY,
ANDROID_CUSTOM
}
每⼀个枚举对象都对应⼀个联系⼈信息,⽐如名字/电话号码,也对应⼀个VCardEntry的内部类,它们都继承内部接⼝EntryElement。
看下VCardParr_V21类parOneVCard⽅法
private boolean parOneVCard() throws IOException, VCardException {
// ret for this entire vCard.
mCurrentEncoding = DEFAULT_ENCODING;
mCurrentChart = DEFAULT_CHARSET;
boolean allowGarbage = fal;
if (!readBeginVCard(allowGarbage)) {
return fal;
}
for (VCardInterpreter interpreter : mInterpreterList) {
}
parItems();
for (VCardInterpreter interpreter : mInterpreterList) {
}
英语四级历年真题
return true;
}
onEntryStarted最后会构造VCardEntry, parItems会调⽤VCardEntry的addProperty⽅法完成各种信息的保存,最后调⽤onEntryEnded将所有VCardEntry对象打包到ArrayList中。
在这14个枚举中,并没有时间信息,即使是获取通话记录,也并没有时间的信息。如何同步时间信息呢?
查看PBAP协议,有⼀个这样的字段,X-IRMC-CALL-DATETIME,说明可以同步时间信息的。通过对VCardParrImpl_V21和VCardEntry 的addProperty⽅法进⾏调试,发现X-IRMC-CALL-DATETIME参数是有输出的,只是VCardEntry中没有该枚举和对应的类⽽已。在VCardEntry中添加枚举和对应的内部类就可以实现同步时间的功能。
1,,在枚举EntryLabel最后添加⼀项,
DATETIME
2,, 添加对应的内部类
public static class DatetimeData implements EntryElement {
private final String mDatetime;
public DatetimeData(String datetime) {
mDatetime = datetime;
}
@Override
英文单词翻译public EntryLabel getEntryLabel() {
return EntryLabel. DATETIME;

本文发布于:2023-05-25 08:59:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/121910.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:联系   信息   对应
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图