欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)例詳解Android 獲取短信會(huì)話列表

 更新時(shí)間:2015年12月23日 14:24:10   作者:NCUT藍(lán)色理想  
本文通過實(shí)例詳解android獲取短信會(huì)話列表的全部內(nèi)容,涉及到android獲取短信列表的相關(guān)知識(shí),對(duì)android會(huì)話列表相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧

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ì)話列表的全部敘述,希望大家喜歡。

相關(guān)文章

最新評(píng)論