android 藍牙 pbap 獲取通話記錄以及通話日期時間

android 藍牙 pbap 獲取通話時間

之前,我們利用 pbap 協(xié)議獲取到了用戶的通訊錄缓熟。那自然而然產(chǎn)生了衍生需求:能否獲取通話記錄今艺?包括打電話記錄(DIALED)缩筛、接電話記錄(RECEIVED)、未接電話記錄(MISSED)锌仅?
答案是肯定的章钾。類比獲取通訊錄的方式,我們可以通過修改client.pullPhoneBook(BluetoothPbapClient.PB_PATH);中的PB_PATH參數(shù)热芹,來獲取其他的信息贱傀。比如:

    /**
     * Path to local incoming calls history object
     */
    public static final String ICH_PATH = "telecom/ich.vcf";

    /**
     * Path to local outgoing calls history object
     */
    public static final String OCH_PATH = "telecom/och.vcf";

    /**
     * Path to local missed calls history object
     */
    public static final String MCH_PATH = "telecom/mch.vcf";

    /**
     * Path to local combined calls history object
     */
    public static final String CCH_PATH = "telecom/cch.vcf";

    /**
     * Path to local main phone book object
     */
    public static final String PB_PATH = "telecom/pb.vcf";

但是,在替換PB_PATH為其他的各種 PATH 之后传透,我們發(fā)現(xiàn)獲取的信息不完全异吻。我們從控制臺中輸出的信息只有按時間順序倒敘排列的一堆聯(lián)系人信息(其實是VCardEntry對象,控制臺輸出的時候調(diào)用了VCardEntry#toString())巫俺。每一個聯(lián)系人信息如下:

[[  
hash: 427457895   
NAME: [family: nameOfThePerson, given: null, middle: null, prefix: null, suffix: null]  
PHONE: [type: 2, data: 1-111-111-1111, label: null, isPrimary: false]  
]]

問題來了株搔,怎么沒有時間信息剖淀?對于通話記錄而言,時間信息還是比較重要的纤房。那么纵隔,是 pbap 協(xié)議就不會給我們返回時間?還是我們解析時間數(shù)據(jù)的時候出了錯誤炮姨?或者是手機廠商在實現(xiàn) pbap server 端的時候偷工減料了呢捌刮?

首先,先去藍牙 pbap 協(xié)議中查看是否有通話記錄對應(yīng)的描述:

3.1.4.1 Call History extension
The time of each call found in och, ich, mch and cch folder, can be shown using the
IrMC [13] defined X-IRMC-CALL-DATETIME property that extends the vCard
specification. This attribute can be used in combination with three newly created
property parameters:
? MISSED
? RECEIVED
? DIALED
These are used to indicate the nature of the call that is time-stamped with X-IRMCCALL-DATETIME.
For instance, a call that was missed on March 20th, 2005 at 10 am would be stamped:
X-IRMC-CALL-DATETIME;MISSED:20050320T100000
It is strongly recommended to use this property parameter whenever possible. They are
especially useful in vCards that are retrieved from the cch folder ( see Section 3.1.2 ).
Note that it is legal to use this property with no data; i.e,
X-IRMC-CALL-DATETIME;MISSED:

看來舒岸,關(guān)于通話記錄糊啡,PBAP 協(xié)議是有所規(guī)定的。所以吁津,問題可能出在手機廠商的 pbap server 端或者是出在我們解析數(shù)據(jù)的時候棚蓄。通過對VCardParserImp_V21進行深層次的調(diào)試,我們發(fā)現(xiàn)碍脏,X-IRMC-CALL-DATETIME參數(shù)是有輸出的梭依。那就說明是手機端的 pbap server 是沒有問題的。問題出在我們的 pbap client 上典尾。更具體的定位一下役拴,是我們解析這個參數(shù)的時候出了問題,或者是根據(jù)解析出的參數(shù)構(gòu)造VCardEntry的時候出了問題钾埂。

繼續(xù)調(diào)試河闰,在 VCardEntry#addProperty(VCardProperty property) 函數(shù)中,可以輸出 property 并且也是有 X-IRMC-CALL-DATETIME 對應(yīng)的數(shù)據(jù)的褥紫。那么姜性,最終鎖定了問題:我們構(gòu)造 VCardEntry 的時候,沒有把 X-IRMC-CALL-DATETIME 加進來髓考。更本質(zhì)的原因是部念,android sdk 23 的相關(guān)源碼中,沒有定義 X-IRMC-CALL-DATETIME 相關(guān)的字段氨菇。

找到了問題所在儡炼,改的時候就非常好改了。

首先查蓉,在 VCardConstants.java 中添加

    public static final String PROPERTY_X_IRMC_CALL_DATETIME = "X-IRMC-CALL-DATETIME"; // added

然后乌询,在 VCardEntry.java 中添加:

    public enum EntryLabel {
        NAME,
        PHONE,
        EMAIL,
        POSTAL_ADDRESS,
        ORGANIZATION,
        IM,
        PHOTO,
        WEBSITE,
        SIP,
        NICKNAME,
        NOTE,
        BIRTHDAY,
        ANNIVERSARY,
        ANDROID_CUSTOM,
        CALL_DATETIME // added
    }

然后,添加 CALL_DATETIME 對應(yīng)的類:

public static class CallDatetimeData implements EntryElement {

        private final String mCallDatetime;

        public CallDatetimeData(String datetime) {
            mCallDatetime = datetime;
        }



        /** start implementing EntryElement */

        @Override
        public EntryLabel getEntryLabel() {
            return EntryLabel.CALL_DATETIME;
        }

        @Override
        public boolean isEmpty() {
            return TextUtils.isEmpty(mCallDatetime);
        }

        @Override
        public void constructInsertOperation(List<ContentProviderOperation> operationList, int backReferenceIndex) {
            // 我沒看懂這個函數(shù)要干嘛豌研,時間有限妹田,先不改了竣灌。
        }

        /** end implementing EntryElement */



        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (!(obj instanceof CallDatetimeData)) {
                return false;
            }
            CallDatetimeData datetimeData = (CallDatetimeData) obj;
            return TextUtils.equals(mCallDatetime, datetimeData.mCallDatetime);
        }

        @Override
        public int hashCode() {
            return mCallDatetime != null ? mCallDatetime.hashCode() : 0;
        }

        @Override
        public String toString() {
            return "call datetime: " + mCallDatetime;
        }

        public String getCallDatetime() {
            return mCallDatetime;
        }
    }

最后是在構(gòu)造 VCardEntry 對象的時候,將這個字段添加進來:
VCardEntry#addProperty() 中秆麸,添加:

if (propertyName.equals(VCardConstants.PROPERTY_X_IRMC_CALL_DATETIME)) {
            mCallDatetimeData = new CallDatetimeData(propValue);  
}

然后在 VCardEntry 中添加一個 getter 就完事了:

    public final String getCallDatetime() {
        return mCallDatetimeData != null ? mCallDatetimeData.mCallDatetime : null;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末初嘹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沮趣,更是在濱河造成了極大的恐慌屯烦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件房铭,死亡現(xiàn)場離奇詭異驻龟,居然都是意外死亡,警方通過查閱死者的電腦和手機缸匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門翁狐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凌蔬,你說我怎么就攤上這事露懒。” “怎么了砂心?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵懈词,是天一觀的道長。 經(jīng)常有香客問我辩诞,道長坎弯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任译暂,我火速辦了婚禮抠忘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘外永。我一直安慰自己崎脉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布象迎。 她就那樣靜靜地躺著荧嵌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砾淌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天谭网,我揣著相機與錄音汪厨,去河邊找鬼。 笑死愉择,一個胖子當(dāng)著我的面吹牛劫乱,可吹牛的內(nèi)容都是我干的织中。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼衷戈,長吁一口氣:“原來是場噩夢啊……” “哼狭吼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起殖妇,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤刁笙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谦趣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疲吸,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年前鹅,在試婚紗的時候發(fā)現(xiàn)自己被綠了摘悴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡舰绘,死狀恐怖蹂喻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捂寿,我是刑警寧澤叉橱,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站者蠕,受9級特大地震影響窃祝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踱侣,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一粪小、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抡句,春花似錦探膊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锐锣,卻和暖如春腌闯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雕憔。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工姿骏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斤彼。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓分瘦,卻偏偏與公主長得像蘸泻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘲玫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理悦施,服務(wù)發(fā)現(xiàn),斷路器去团,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫抡诞、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 有沒有不自私的愛情渗勘? 沒有沐绒。 愛情就是從對方那里各取所需 我要你愛我 我要你陪伴我 這就是索取 說什么無私的愛 沒...
    禾豆閱讀 735評論 1 1
  • 近十年的光陰,即使是曾經(jīng)分秒難熬的低谷旺坠,回憶起來也是寥寥字?jǐn)?shù)一恍而過乔遮。再追溯回更早的起初,也仿佛就在觸手可及的昨天...
    藍得出奇閱讀 380評論 0 0