Android中读取短信信息

转自:http://blog.csdn.net/peijiangping1989/article/details/7368178


Android中读取的短信文件有

[java]  view plain copy print ?
  1. /** 
  2.  * 所有的短信 
  3.  */  
  4. public static final String SMS_URI_ALL = "content://sms/";  
  5. /** 
  6.  * 收件箱短信 
  7.  */  
  8. public static final String SMS_URI_INBOX = "content://sms/inbox";  
  9. /** 
  10.  * 发件箱短信 
  11.  */  
  12. public static final String SMS_URI_SEND = "content://sms/sent";  
  13. /** 
  14.  * 草稿箱短信 
  15.  */  
  16. public static final String SMS_URI_DRAFT = "content://sms/draft";  

读取的短信信息有:

    _id:短信序号,如100   
*   thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的   
*   address:发件人地址,即手机号,如+8613811810000   
*   person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null   
*   date:日期,long型,如1256539465022,可以对日期显示格式进行设置   
*   protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信      read:是否阅读0未读,1已读   
*   status:短信状态-1接收,0complete,64pending,128failed   
*   type:短信类型1是接收到的,2是已发出      body:短信具体内容   
*   service_center:短信服务中心号码编号,如+8613800755500

下面我们可以先建立一个SmsInfo来提取各种信息如下:

[java]  view plain copy print ?
  1. package com.pei.info;  
  2.   
  3. /** 
  4.  * class name:SmsInfo<BR> 
  5.  * class description:获取短信各种信息的类<BR> 
  6.  * PS: <BR> 
  7.  * Date:2012-3-19<BR> 
  8.  *  
  9.  * @version 1.00 
  10.  * @author CODYY)peijiangping 
  11.  */  
  12. public class SmsInfo {  
  13.     /** 
  14.      * 短信内容 
  15.      */  
  16.     private String smsbody;  
  17.     /** 
  18.      * 发送短信的电话号码 
  19.      */  
  20.     private String phoneNumber;  
  21.     /** 
  22.      * 发送短信的日期和时间 
  23.      */  
  24.     private String date;  
  25.     /** 
  26.      * 发送短信人的姓名 
  27.      */  
  28.     private String name;  
  29.     /** 
  30.      * 短信类型1是接收到的,2是已发出 
  31.      */  
  32.     private String type;  
  33.   
  34.     public String getSmsbody() {  
  35.         return smsbody;  
  36.     }  
  37.   
  38.     public void setSmsbody(String smsbody) {  
  39.         this.smsbody = smsbody;  
  40.     }  
  41.   
  42.     public String getPhoneNumber() {  
  43.         return phoneNumber;  
  44.     }  
  45.   
  46.     public void setPhoneNumber(String phoneNumber) {  
  47.         this.phoneNumber = phoneNumber;  
  48.     }  
  49.   
  50.     public String getDate() {  
  51.         return date;  
  52.     }  
  53.   
  54.     public void setDate(String date) {  
  55.         this.date = date;  
  56.     }  
  57.   
  58.     public String getName() {  
  59.         return name;  
  60.     }  
  61.   
  62.     public void setName(String name) {  
  63.         this.name = name;  
  64.     }  
  65.   
  66.     public String getType() {  
  67.         return type;  
  68.     }  
  69.   
  70.     public void setType(String type) {  
  71.         this.type = type;  
  72.     }  
  73. }  

然后就是封装类,读取信息内容SmsContent.java

[java]  view plain copy print ?
  1. package com.pei.util;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.pei.info.SmsInfo;  
  7.   
  8. import android.app.Activity;  
  9. import android.database.Cursor;  
  10. import android.net.Uri;  
  11.   
  12. /** 
  13.  * class name:SmsChoose<BR> 
  14.  * class description:获取手机中的各种短信信息<BR> 
  15.  * PS: 需要权限 <uses-permission android:name="android.permission.READ_SMS" /><BR> 
  16.  * Date:2012-3-19<BR> 
  17.  *  
  18.  * @version 1.00 
  19.  * @author CODYY)peijiangping 
  20.  */  
  21. public class SmsContent {  
  22.     private Activity activity;//这里有个activity对象,不知道为啥以前好像不要,现在就要了。自己试试吧。  
  23.     private Uri uri;  
  24.     List<SmsInfo> infos;  
  25.   
  26.     public SmsContent(Activity activity, Uri uri) {  
  27.         infos = new ArrayList<SmsInfo>();  
  28.         this.activity = activity;  
  29.         this.uri = uri;  
  30.     }  
  31.   
  32.     /** 
  33.      * Role:获取短信的各种信息 <BR> 
  34.      * Date:2012-3-19 <BR> 
  35.      *  
  36.      * @author CODYY)peijiangping 
  37.      */  
  38.     public List<SmsInfo> getSmsInfo() {  
  39.         String[] projection = new String[] { "_id""address""person",  
  40.                 "body""date""type" };  
  41.         Cursor cusor = activity.managedQuery(uri, projection, nullnull,  
  42.                 "date desc");  
  43.         int nameColumn = cusor.getColumnIndex("person");  
  44.         int phoneNumberColumn = cusor.getColumnIndex("address");  
  45.         int smsbodyColumn = cusor.getColumnIndex("body");  
  46.         int dateColumn = cusor.getColumnIndex("date");  
  47.         int typeColumn = cusor.getColumnIndex("type");  
  48.         if (cusor != null) {  
  49.             while (cusor.moveToNext()) {  
  50.                 SmsInfo smsinfo = new SmsInfo();  
  51.                 smsinfo.setName(cusor.getString(nameColumn));  
  52.                 smsinfo.setDate(cusor.getString(dateColumn));  
  53.                 smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn));  
  54.                 smsinfo.setSmsbody(cusor.getString(smsbodyColumn));  
  55.                 smsinfo.setType(cusor.getString(typeColumn));  
  56.                 infos.add(smsinfo);  
  57.             }  
  58.             cusor.close();  
  59.         }  
  60.         return infos;  
  61.     }  
  62. }  

在提供一个listview来显示短信内容:

[java]  view plain copy print ?
  1. package com.pei.activity;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.pei.fixed.AllFinalInfo;  
  6. import com.pei.info.SmsInfo;  
  7. import com.pei.util.SmsContent;  
  8. import android.app.Activity;  
  9. import android.content.Context;  
  10. import android.net.Uri;  
  11. import android.os.Bundle;  
  12. import android.view.LayoutInflater;  
  13. import android.view.View;  
  14. import android.view.ViewGroup;  
  15. import android.widget.BaseAdapter;  
  16. import android.widget.ListView;  
  17. import android.widget.TextView;  
  18.   
  19. /** 
  20.  * class name:SmsListActivity<BR> 
  21.  * class description:显示短信的列表<BR> 
  22.  * PS: <BR> 
  23.  * Date:2012-3-19<BR> 
  24.  *  
  25.  * @version 1.00 
  26.  * @author CODYY)peijiangping 
  27.  */  
  28. public class SmsListActivity extends Activity {  
  29.     private ListView listview;  
  30.     private List<SmsInfo> infos;  
  31.   
  32.     @Override  
  33.     protected void onCreate(Bundle savedInstanceState) {  
  34.         super.onCreate(savedInstanceState);  
  35.         setContentView(R.layout.sms);  
  36.         Uri uri = Uri.parse(AllFinalInfo.SMS_URI_INBOX);  
  37.         SmsContent sc = new SmsContent(this, uri);  
  38.         infos = sc.getSmsInfo();  
  39.         listview = (ListView) this.findViewById(R.id.ListView_Sms);  
  40.         listview.setAdapter(new SmsListAdapter(this));  
  41.     }  
  42.   
  43.     class SmsListAdapter extends BaseAdapter {  
  44.         private LayoutInflater layoutinflater;  
  45.         private View myview;  
  46.   
  47.         public SmsListAdapter(Context c) {  
  48.             layoutinflater = LayoutInflater.from(c);  
  49.         }  
  50.   
  51.         @Override  
  52.         public int getCount() {  
  53.             // TODO Auto-generated method stub  
  54.             return infos.size();  
  55.         }  
  56.   
  57.         @Override  
  58.         public Object getItem(int position) {  
  59.             // TODO Auto-generated method stub  
  60.             return null;  
  61.         }  
  62.   
  63.         @Override  
  64.         public long getItemId(int position) {  
  65.             // TODO Auto-generated method stub  
  66.             return 0;  
  67.         }  
  68.   
  69.         @Override  
  70.         public View getView(int position, View convertView, ViewGroup parent) {  
  71.             if (convertView == null) {  
  72.                 myview = layoutinflater.inflate(R.layout.smsitem, null);  
  73.             }  
  74.             TextView body = (TextView) myview  
  75.                     .findViewById(R.id.TextView_SmsBody);  
  76.             TextView name = (TextView) myview  
  77.                     .findViewById(R.id.TextView_SmsName);  
  78.             body.setText(infos.get(position).getSmsbody());  
  79.             name.setText(infos.get(position).getName());  
  80.             return myview;  
  81.         }  
  82.   
  83.     }  
  84. }  

这样你就可以随意的读取各种短信的各种内容了,显示也十分方便。方法还可以继续封装。有待改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值