首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android下查询系统源码望短信的显示

2013-11-08 
Android下查询系统源码看短信的显示查询系统源码看短信的显示如何写:在providers.telephony:SmsProvider:?

Android下查询系统源码看短信的显示

查询系统源码看短信的显示如何写:

在providers.telephony:SmsProvider:

?

1.确定怎么查数据库中的表:

Uri?=?content://sms/conversations

?Android下查询系统源码望短信的显示

?

?

2.确定查询语句:?select??映射条目?from?表??where?查询条件

?Android下查询系统源码望短信的显示

?

表:

sms,?(SELECT?thread_id?AS?group_thread_id,?MAX(date)AS?group_date,COUNT(*)?AS?msg_count?FROM?sms?GROUP?BY?thread_id)?AS?groups

查询条件:

sms.thread_id?=?groups.group_thread_id?AND?sms.date?=?groups.group_date

映射条目:

sms.body?AS?snippet?

?sms.thread_id?AS?thread_id?

?groups.msg_count?AS?msg_count

?Android下查询系统源码望短信的显示

?

所以查询语句:

?

select?

?sms.body?AS?snippet,sms.thread_id?AS?thread_id,groups.msg_count?AS?msg_count

from?

??sms,?(SELECT?thread_id?AS?group_thread_id,?MAX(date)AS?group_date,COUNT(*)?AS?msg_count?FROM?sms?GROUP?BY?thread_id)?AS?groups

where

?sms.thread_id?=?groups.group_thread_id?AND?sms.date?=?groups.group_date

?

查询结果:

?Android下查询系统源码望短信的显示

?

?

?

还需要号码,日期/时间

但看系统源码的映射列都已经写死,用户若添加自己需要的列会将系统的列覆盖:

看系统如何解决:找query:

Android下查询系统源码望短信的显示

这里的query是用户来调用的,所以projectionIn是用户传进来的,

?

继续找:同一个方法内,看query怎么处理projictionIn的,

?Android下查询系统源码望短信的显示

点击查看如何处理用户传进来的projectionIn的,

?

?Android下查询系统源码望短信的显示

?再次点击发现进不去,为本类的方法:查找:

Android下查询系统源码望短信的显示

?

第一个在判断里面,略去不看,看第二个:将projection等各种参数建立成为一个sql语句,点击,发现进不去,,buildQuery为一个本类方法:查找其实现:

?Android下查询系统源码望短信的显示

?

点击发现是一个本类方法,查找其实现:

?Android下查询系统源码望短信的显示

分析源码:

?Android下查询系统源码望短信的显示

将需要添加的列写好,测试正确性:

select?sms.body?AS?snippet,sms.thread_id?AS?thread_id,groups.msg_count?AS?msg_count,sms.address?as?address,sms.date?as?date

from??sms,?(SELECT?thread_id?AS?group_thread_id,?MAX(date)AS?group_date,COUNT(*)?AS?msg_count?FROM?sms?GROUP?BY?thread_id)?AS?groups

where?sms.thread_id?=?groups.group_thread_id?AND?sms.date?=?groups.group_date

?

?Android下查询系统源码望短信的显示

?

?详细代码:

?

1.

[java]?view plaincopyprint??
  1. package?com.itcode.SMSManager.utils;??
  2. ??
  3. import?android.net.Uri;??
  4. ??
  5. public?class?SmsUtils?{??
  6. ??
  7. ?public?static?final?Uri?SMSURL?=?Uri.parse("content://sms/conversations");??
  8. }??


2.

[java]?view plaincopyprint??
  1. package?com.itcode.SMSManager;??
  2. ??
  3. import?android.app.Activity;??
  4. import?android.content.AsyncQueryHandler;??
  5. import?android.content.ContentResolver;??
  6. import?android.database.Cursor;??
  7. import?android.os.Bundle;??
  8. import?android.util.Log;??
  9. ??
  10. import?com.itcode.SMSManager.utils.SmsUtils;??
  11. ??
  12. public?class?ConversationActivity?extends?Activity?{??
  13. ??
  14. ????private?ConversationAsyncQueryHandler?asyncQuery;??
  15. ????private?static?final?String[]?CONVERSATIONSMSPROJECTION?=?{??
  16. ????????????"sms.body?AS?snippet",?"sms.thread_id?AS?thread_id",??
  17. ????????????"groups.msg_count?AS?msg_count",?"sms.address?as?address",??
  18. ????????????"sms.date?as?date"?};??
  19. ????public?static?final?String?TAG?=?"ConversationActivity";??
  20. ??
  21. ????@Override??
  22. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  23. ????????//?TODO?Auto-generated?method?stub??
  24. ????????super.onCreate(savedInstanceState);??
  25. ????????setContentView(R.layout.activity_conversion);??
  26. ??
  27. ????????asyncQuery?=?new?ConversationAsyncQueryHandler(getContentResolver());??
  28. ????????asyncQuery.startQuery(0,?null,?SmsUtils.SMSURL,??
  29. ????????????????CONVERSATIONSMSPROJECTION,?null,?null,?"date?DESC");??
  30. ??
  31. ????}??
  32. ??
  33. ????private?class?ConversationAsyncQueryHandler?extends?AsyncQueryHandler?{??
  34. ??
  35. ????????private?String?value;??
  36. ????????private?String??columnName;??
  37. ??
  38. ????????public?ConversationAsyncQueryHandler(ContentResolver?cr)?{??
  39. ????????????super(cr);??
  40. ????????????//?TODO?Auto-generated?constructor?stub??
  41. ????????}??
  42. ??
  43. ????????/**?
  44. ?????????*?当异步查询结束后调用的方法?
  45. ?????????*?Called?when?an?asynchronous?query?is?completed.?
  46. ?????????*?token?the?token?to?identify?the?query,?passed?in?from?startQuery.?
  47. ?????????*?cookie?添加额外的数据的?the?cookie?object?passed?in?from?startQuery.?
  48. ?????????*?cursor?查询出来的结果集The?cursor?holding?the?results?from?the?query.?
  49. ?????????*/??
  50. ????????@Override??
  51. ????????protected?void?onQueryComplete(int?token,?Object?cookie,?Cursor?cursor)?{??
  52. ????????????//?TODO?Auto-generated?method?stub??
  53. ????????????super.onQueryComplete(token,?cookie,?cursor);??
  54. ????????????if(cursor?!=?null?&&?cursor.getCount()>0){??
  55. ????????????????int?columnCount?=?cursor.getColumnCount();??
  56. ????????????????while(cursor.moveToNext()){??
  57. ????????????????????for(int?i=0;i<columnCount;i++){??
  58. ????????????????????????columnName?=?cursor.getColumnName(i);??
  59. ????????????????????????value?=?cursor.getString(i);??
  60. ????????????????????????Log.i(TAG,"当前是第"+cursor.getPosition()?+?"行:"?+?columnName?+?":"?+?value);??
  61. ????????????????????}??
  62. ????????????????}??
  63. ????????????}??
  64. ????????}??
  65. ??
  66. ????}??
  67. }??


?

运行结果:

?

?Android下查询系统源码望短信的显示

??

?Android下查询系统源码望短信的显示?Android下查询系统源码望短信的显示

热点排行