實(shí)例詳解Android 獲取短信會(huì)話列表
Android中的短信并沒有正式的content provider可用,在官方文檔中沒有提供定義。不過依然可以自己定義好URI,然后查詢出短信內(nèi)容。例如conetent://sms則是所有短信所在的path。
要將短信按會(huì)話分類,原先我是查詢出所有短信后,然后再按照thread_id分類。系統(tǒng)自帶的短信程序包含一個(gè)會(huì)話顯示界面,每個(gè)條目包含:聯(lián)系人、短信數(shù)量、第一條短信等內(nèi)容。當(dāng)我的程序處理的短信較多時(shí),一次查詢出所有的短信就變得很慢。(如果再加上為每個(gè)會(huì)話查詢聯(lián)系人信息,則會(huì)更慢)
看了系統(tǒng)短信的代碼,發(fā)現(xiàn)它可以只查詢出會(huì)話的信息,而不用查詢出所有短信內(nèi)容。因?yàn)椴糠执a沒找到,一直不知道它是怎么做到的??戳藅elphony provider的代碼后,才知曉一二。
實(shí)際上,短信數(shù)據(jù)庫中(mmssms.db)并沒有一個(gè)表存儲(chǔ)會(huì)話信息的。系統(tǒng)提供的content provider中,實(shí)際上是支持直接查詢會(huì)話信息的。只不過,其實(shí)現(xiàn)方式,不是通過一個(gè)現(xiàn)成的表,而是通過SQL語句,從多個(gè)表里取數(shù)據(jù)完成的。關(guān)于這個(gè)實(shí)現(xiàn)方式,在這個(gè)帖子中也有所提及。
實(shí)現(xiàn)方式就不深究了,畢竟我對(duì)SQL查詢不太熟。放出直接的使用方法:
獲取會(huì)話信息的URI
Java代碼
public static final Uri MMSSMS_FULL_CONVERSATION_URI = Uri.parse("content://mms-sms/conversations"); public static final Uri CONVERSATION_URI = MMSSMS_FULL_CONVERSATION_URI.buildUpon(). appendQueryParameter("simple", "true").build(); public static final Uri MMSSMS_FULL_CONVERSATION_URI = Uri.parse("content://mms-sms/conversations"); public static final Uri CONVERSATION_URI = MMSSMS_FULL_CONVERSATION_URI.buildUpon(). appendQueryParameter("simple", "true").build();
通過指定simple=true,則可以獲取出一個(gè)大概的會(huì)話數(shù)據(jù),包含以下列:
Java代碼
private static final int ID = 0; private static final int DATE = 1; private static final int MESSAGE_COUNT = 2; private static final int RECIPIENT_IDS = 3; private static final int SNIPPET = 4; private static final int SNIPPET_CS = 5; private static final int READ = 6; private static final int TYPE = 7; private static final int ERROR = 8; private static final int HAS_ATTACHMENT = 9;
列名則為:
Java代碼
private static final String[] ALL_THREADS_PROJECTION = { "_id", "date", "message_count", "recipient_ids", "snippet", "snippet_cs", "read", "error", "has_attachment" };
其中:
1、message_count為該會(huì)話的消息數(shù)量;
2、recipient_ids為聯(lián)系人ID,這個(gè)ID不是聯(lián)系人表中的_id,而是指向表 canonical_addresses 里的id,canonical_addresses這個(gè)表同樣位于mmssms.db,它映射了recipient_ids到一個(gè)電話號(hào)碼,也就是說,最終獲取聯(lián)系人信息,還是得通過電話號(hào)碼;
3、snippet為最后收到/發(fā)送的短信;
每個(gè)數(shù)據(jù)的類型嘛,大致為:
Java代碼
long id = cursor.getLong(ID); long date = cursor.getLong(DATE); long msgCount = cursor.getLong(MESSAGE_COUNT); String recipIDs = cursor.getString(RECIPIENT_IDS); String snippet = cursor.getString(SNIPPET); long snippetCS = cursor.getLong(SNIPPET_CS); long read = cursor.getLong(READ); long type = cursor.getLong(TYPE); long error = cursor.getLong(ERROR); long hasAttach = cursor.getLong(HAS_ATTACHMENT); long id = cursor.getLong(ID); long date = cursor.getLong(DATE); long msgCount = cursor.getLong(MESSAGE_COUNT); String recipIDs = cursor.getString(RECIPIENT_IDS); String snippet = cursor.getString(SNIPPET); long snippetCS = cursor.getLong(SNIPPET_CS); long read = cursor.getLong(READ); long type = cursor.getLong(TYPE); long error = cursor.getLong(ERROR); long hasAttach = cursor.getLong(HAS_ATTACHMENT);
以上內(nèi)容是小編給大家介紹的Android 獲取短信會(huì)話列表的全部敘述,希望大家喜歡。
- android短信攔截的實(shí)現(xiàn)代碼
- Android手機(jī)號(hào)注冊(cè)、綁定手機(jī)號(hào)獲取短信驗(yàn)證碼實(shí)例
- Android創(chuàng)建簡單發(fā)送和接收短信應(yīng)用
- 淺析Android手機(jī)衛(wèi)士之手機(jī)實(shí)現(xiàn)短信指令獲取位置
- 淺析Android手機(jī)衛(wèi)士接收短信指令執(zhí)行相應(yīng)操作
- Android開發(fā)中實(shí)現(xiàn)發(fā)送短信的小程序示例
- Android獲取和讀取短信驗(yàn)證碼的實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)支持進(jìn)度條顯示的短信備份工具類
- Android發(fā)送短信方法實(shí)例詳解
- Android接收和發(fā)送短信處理
- Android開發(fā)之電話撥號(hào)器和短信發(fā)送器實(shí)現(xiàn)方法
- Android編程之短信列表的時(shí)間顯示實(shí)例分析
- Android中實(shí)現(xiàn)基本的短信攔截功能的代碼示例
相關(guān)文章
Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android實(shí)現(xiàn)Neumorphism?UI控件
大家好,本篇文章主要講的是Android實(shí)現(xiàn)Neumorphism?UI控件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02Android使用FontMetrics對(duì)象計(jì)算位置坐標(biāo)
這篇文章主要為大家詳細(xì)介紹了Android使用FontMetrics對(duì)象計(jì)算位置坐標(biāo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Android中實(shí)現(xiàn)根據(jù)資源名獲取資源ID
這篇文章主要介紹了Android中實(shí)現(xiàn)根據(jù)資源名獲取資源ID,本文講解了使用文件名獲取資源ID的方法,需要的朋友可以參考下2015-01-01Android下拉刷新控件SwipeRefreshLayout源碼解析
這篇文章主要為大家詳細(xì)解析Android下拉刷新控件SwipeRefreshLayout源碼,感興趣的小伙伴們可以參考一下2016-07-07總結(jié)Android中多線程更新應(yīng)用的頁面信息的方式
這篇文章主要介紹了總結(jié)Android中多線程更新應(yīng)用的頁面信息的方式,文中共總結(jié)了runOnUiThread、Handler、AsyncTask異步以及View直接在UI線程中更新的方法,需要的朋友可以參考下2016-02-02Android中TextView限制最大行數(shù)并在最后用顯示...全文
TextView在android開發(fā)中是一個(gè)經(jīng)常用到的基礎(chǔ)控件,功能也很強(qiáng)大,限制輸入字符類型,字?jǐn)?shù)什么的,下面這篇文章主要給大家介紹了關(guān)于Android中TextView限制最大行數(shù)并在最后用顯示...全文的相關(guān)資料,需要的朋友可以參考下2022-04-04