藍牙電話之PBAP同步電話簿協議分析

藍牙電話之PBAP-同步協議分析

在這裏插入圖片描述

在前一篇文章《藍牙電話之PBAP協議分析》中從整體上分析了PBAP協議的內容,本章我們着重分析協議中的精髓——同步電話簿。PBAP協議存在的目的就是將PSE端的源數據同步到PCE,那麼就讓我們開啓這段旅程吧。

在這裏插入圖片描述

每一種協議都會定義相關的功能features,PBAP同步也不另外,協議中主要定義了以下兩種功能。

  • Download:此功能用於下載電話簿對象的全部內容

  • Browsing:此功能特別適用於需要滾動瀏覽電話簿的應用程序

PSE和PCE兩端對這兩種功能的支持見下圖:
在這裏插入圖片描述

由於Download功能可以將電話簿對象的全部內容同步到PCE,從而PCE端獲取到數據後完全可以通過藍牙電話等應用程序將數據顯示到界面,一樣可以達到滾動瀏覽電話簿信息的目的,所以後面主要以Download爲分析點,對Browsing感興趣的同學,歡迎給我私信一起探討該功能點如何使用。

Download這個功能特別適用於PSE端存儲的電話簿容量相對較大,PCE設備通常從PSE端下載這些大容量數據並在其本地存儲整個電話簿的場景下。PullPhonebook函數就是用來下載自己感興趣的電話簿對象。
在這裏插入圖片描述

由於PBAP協議是基於OBEX的,所以PullPhonebook函數顧名思義也是採用request-response這種一問一答的形式傳輸數據。

請求格式
在這裏插入圖片描述

同步的電話簿對象名字Name值有如下幾種選項:
在這裏插入圖片描述

回覆格式
在這裏插入圖片描述

回覆數據中的vCard對象只應包含使用屬性選擇器Attribute Selector參數指示的屬性,並且應使用格式Format參數指示的格式組裝數據。當前藍牙PBAP協議中的vCard版本只有vCard 2.1和vCard 3.0這兩種版本,所以我們在構造數據時選擇其中一種vCard版本即可。

請求回覆格式中需要重點講解的只有一個參數:Application Parameters Header,其數據是由一組不同的tag組成整體的Application Parameters,可選的Tag如下圖,比較常用的爲紅色框圖標註出來的這六個tag:
在這裏插入圖片描述

這些tag中PropertySelector用於指示請求的vCard對象中應該包含的屬性,PSE根據這些屬性來組織回覆的Body/End of Body Header中包含的數據,PCE只能使用此頭接收所請求的vCard所需內容,PSE不得回覆任何其他性能數據,除非PCE有其他要求。

因爲PropertySelector的值是由一個64位的數據組成,所以每一位都代表了一種屬性,如果PCE請求的電話簿需要包含對應的數據,就將該數據對應在PropertySelector的二進制位設置爲true(1)。具體每一位的含義見下圖:
在這裏插入圖片描述

同步電話簿中的信息時,最主要的關注還是聯繫人名字、聯繫人號碼、聯繫人頭像這三部分數據。所以要根據自己業務的真實需求來構造PropertySelector值,同步到PCE端相關應用需要的數據。

由於當前安卓源碼還沒實現PCE端的相關接口,需要適配自我實現。我這裏採用的這套安卓代碼是以高通源碼爲基礎,加上功能適配後實現的一套PBAP同步代碼,PCE端同步電話簿的流程大概爲:獲取同步對象的數量 –> 同步該對象。

接下來以HCI視角簡單分析下同步流程:

1、 同步聯繫人
在這裏插入圖片描述

同步聯繫人整體上分爲兩步驟,先獲取兩種Name下的聯繫人數量,再根據數量分別同步對應Name下的聯繫人數據,以下兩幅截圖選取Name=telecom/pb.vcf爲例進行說明,SIM卡的流程類似。

  • 獲取聯繫人數量
    在這裏插入圖片描述

  • 同步聯繫人數據
    在這裏插入圖片描述

2、 同步通話記錄

通話記錄有三種類型及對應的vcf文件

  • MISSED:未接來電通話記錄——mch.vcf

  • RECEIVED:已接來電通話記錄——ich.vcf

  • DIALED:去電通話記錄——och.vcf

但是還有一種類型的vcf文件包含以上三種類型,即cch.vcf,所以可以根據自己的需求選擇同步哪種通話記錄,我這邊實現的是同步全部類型的通話記錄(主要是分類型依次去同步通話記錄,太麻煩了)
在這裏插入圖片描述

PCE端同步獲取到電話簿數據後基本上有兩種方式來處理數據:

  1. 通過回調方式上報給應用(需要添加相關回調打通APK-API-藍牙服務這三層的關係)
  2. 存儲在安卓系統提供的數據庫中,上報應用相關狀態,應用再從數據庫中取出對應的數據

實際使用以上兩種方式後,自我感覺通過回調方式上報數據速度很快,但數據庫的優勢是可以將數據已數據庫的形式存儲,不擔心應用或安卓系統crash後導致的數據丟失問題。所以建議大家可以兩種方式結合起來共同使用。

好了,藍牙電話中關於PBAP協議同步數據的分析就總結到這,感興趣的小夥伴歡迎私信留言一起討論

更多互聯互通技術,歡迎關注微信公衆號:Connectivity
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章