一段完整的Android平台上短信功能的接口源码,利用扩展的API可以通过js实现如下功能:
1. getContentUris():读取短信相关的所有数据库表的Uri地址;
2. get(int number):读取若干条短信;
3. getUnread(int number):读取若干条未读短信;
4. getRead(int number):读取若干条已读短信;
5. getInbox(int number):从收件箱读取若干条短信;
6. getSent(int number):读取若干条已发短信;
7. getByThread(int threadID):读取会话中所有短信;
8. getThreads(int number):读取若干条会话;
9. getData(String selection, int number):根据条件读取若干条短信。

Java代码
  1. /*
  2. *Copyright(C)2011TheRexseeOpenSourceProject
  3. *
  4. *LicensedundertheRexseeLicense,Version1.0(the"License");
  5. *youmaynotusethisfileexceptincompliancewiththeLicense.
  6. *YoumayobtainacopyoftheLicenseat
  7. *
  8. *http://www.rexsee.com/CN/legal/license.html
  9. *
  10. *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
  11. *distributedundertheLicenseisdistributedonan"ASIS"BASIS,
  12. *WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
  13. *SeetheLicenseforthespecificlanguagegoverningpermissionsand
  14. *limitationsundertheLicense.
  15. */
  16. packagerexsee.communication;
  17. importrexsee.core.browser.JavascriptInterface;
  18. importrexsee.core.browser.RexseeBrowser;
  19. importrexsee.core.utilities.Escape;
  20. importandroid.content.ContentResolver;
  21. importandroid.content.Context;
  22. importandroid.database.Cursor;
  23. importandroid.net.Uri;
  24. publicclassRexseeSMSimplementsJavascriptInterface{
  25. privatestaticfinalStringINTERFACE_NAME="SMS";
  26. @Override
  27. publicStringgetInterfaceName(){
  28. returnmBrowser.application.resources.prefix+INTERFACE_NAME;
  29. }
  30. @Override
  31. publicJavascriptInterfacegetInheritInterface(RexseeBrowserchildBrowser){
  32. returnthis;
  33. }
  34. @Override
  35. publicJavascriptInterfacegetNewInterface(RexseeBrowserchildBrowser){
  36. returnnewRexseeSMS(childBrowser);
  37. }
  38. publicstaticfinalStringCONTENT_URI_SMS="content://sms";
  39. publicstaticfinalStringCONTENT_URI_SMS_INBOX="content://sms/inbox";
  40. publicstaticfinalStringCONTENT_URI_SMS_SENT="content://sms/sent";
  41. publicstaticfinalStringCONTENT_URI_SMS_CONVERSATIONS="content://sms/conversations";
  42. publicstaticString[]SMS_COLUMNS=newString[]{
  43. "_id",//0
  44. "thread_id",//1
  45. "address",//2
  46. "person",//3
  47. "date",//4
  48. "body",//5
  49. "read",//6;0:notread1:read;defaultis0
  50. "type",//7;0:all1:inBox2:sent3:draft4:outBox5:failed6:queued
  51. "service_center"//8
  52. };
  53. publicstaticString[]THREAD_COLUMNS=newString[]{
  54. "thread_id",
  55. "msg_count",
  56. "snippet",
  57. };
  58. privatefinalContextmContext;
  59. privatefinalRexseeBrowsermBrowser;
  60. publicRexseeSMS(RexseeBrowserbrowser){
  61. mBrowser=browser;
  62. mContext=browser.getContext();
  63. }
  64. //JavaScriptInterface
  65. publicStringgetContentUris(){
  66. Stringrtn="{";
  67. rtn+="\"sms\":\""+CONTENT_URI_SMS+"\"";
  68. rtn+=",\"inbox\":\""+CONTENT_URI_SMS_INBOX+"\"";
  69. rtn+=",\"sent\":\""+CONTENT_URI_SMS_SENT+"\"";
  70. rtn+=",\"conversations\":\""+CONTENT_URI_SMS_CONVERSATIONS+"\"";
  71. rtn+="}";
  72. returnrtn;
  73. }
  74. publicStringget(intnumber){
  75. returngetData(null,number);
  76. }
  77. publicStringgetUnread(intnumber){
  78. returngetData("type=1ANDread=0",number);
  79. }
  80. publicStringgetRead(intnumber){
  81. returngetData("type=1ANDread=1",number);
  82. }
  83. publicStringgetInbox(intnumber){
  84. returngetData("type=1",number);
  85. }
  86. publicStringgetSent(intnumber){
  87. returngetData("type=2",number);
  88. }
  89. publicStringgetByThread(intthread){
  90. returngetData("thread_id="+thread,0);
  91. }
  92. publicStringgetData(Stringselection,intnumber){
  93. Cursorcursor=null;
  94. ContentResolvercontentResolver=mContext.getContentResolver();
  95. try{
  96. if(number>0){
  97. cursor=contentResolver.query(Uri.parse(CONTENT_URI_SMS),SMS_COLUMNS,selection,null,"datedesclimit"+number);
  98. }else{
  99. cursor=contentResolver.query(Uri.parse(CONTENT_URI_SMS),SMS_COLUMNS,selection,null,"datedesc");
  100. }
  101. if(cursor==null||cursor.getCount()==0)return"[]";
  102. Stringrtn="";
  103. for(inti=0;i<cursor.getCount();i++){
  104. cursor.moveToPosition(i);
  105. if(i>0)rtn+=",";
  106. rtn+="{";
  107. rtn+="\"_id\":"+cursor.getString(0);
  108. rtn+=",\"thread_id\":"+cursor.getString(1);
  109. rtn+=",\"address\":\""+cursor.getString(2)+"\"";
  110. rtn+=",\"person\":\""+((cursor.getString(3)==null)?"":cursor.getString(3))+"\"";
  111. rtn+=",\"date\":"+cursor.getString(4);
  112. rtn+=",\"body\":\""+Escape.escape(cursor.getString(5))+"\"";
  113. rtn+=",\"read\":"+((cursor.getInt(6)==1)?"true":"false");
  114. rtn+=",\"type\":"+cursor.getString(7);
  115. rtn+=",\"service_center\":"+cursor.getString(8);
  116. rtn+="}";
  117. }
  118. return"["+rtn+"]";
  119. }catch(Exceptione){
  120. mBrowser.exception(getInterfaceName(),e);
  121. return"[]";
  122. }
  123. }
  124. publicStringgetThreads(intnumber){
  125. Cursorcursor=null;
  126. ContentResolvercontentResolver=mContext.getContentResolver();
  127. try{
  128. if(number>0){
  129. cursor=contentResolver.query(Uri.parse(CONTENT_URI_SMS_CONVERSATIONS),THREAD_COLUMNS,null,null,"thread_iddesclimit"+number);
  130. }else{
  131. cursor=contentResolver.query(Uri.parse(CONTENT_URI_SMS_CONVERSATIONS),THREAD_COLUMNS,null,null,"thread_iddesc");
  132. }
  133. if(cursor==null||cursor.getCount()==0)return"[]";
  134. Stringrtn="";
  135. for(inti=0;i<cursor.getCount();i++){
  136. cursor.moveToPosition(i);
  137. if(i>0)rtn+=",";
  138. rtn+="{";
  139. rtn+="\"thread_id\":"+cursor.getString(0);
  140. rtn+=",\"msg_count\":"+cursor.getString(1);
  141. rtn+=",\"snippet\":\""+Escape.escape(cursor.getString(2))+"\"";
  142. rtn+="}";
  143. }
  144. return"["+rtn+"]";
  145. }catch(Exceptione){
  146. mBrowser.exception(getInterfaceName(),e);
  147. return"[]";
  148. }
  149. }
  150. }
转自:http://snoopychen.iteye.com/blog/1276864

更多相关文章

  1. 读取android手机流量信息
  2. android拍照与读取相册
  3. android打电话发短信
  4. Android读取Word文档
  5. [APP] Android(安卓)开发笔记 006-使用短信验证SDK进行短信验证
  6. Android读取Excel文件
  7. Android(安卓)Manifest文件中meta-data的配置读取
  8. android学习轨迹之二:Android权限标签uses-permission的书写位置
  9. Android发送短信方法实例详解

随机推荐

  1. mysql索引失效的十大问题小结
  2. mysql隔离级别详解及示例
  3. Docker启动mysql配置实现过程
  4. MySQL中常见的六个约束类型详解
  5. MySQL中的回表和索引覆盖示例详解
  6. 浅谈订单重构之 MySQL 分库分表实战篇
  7. CentOS7安装MySQL 8.0.26的过程
  8. 详解MySQL主键唯一键重复插入解决方法
  9. 解决MySQL主从数据库没有同步的两种方法
  10. MySQL 8中新增的这三大索引 隐藏、降序、