基于Android的短信应用开发(五)——读取显示会话信息记录

         在上一次,我们读取显示了短信会话列表,接下来,要继续进行的工作就是点击每个短信会话后,显示该会话包含的所有信息记录,我们还是先来看一下运行效果吧,左图为短信会话列表,右图为点击其中第二个会话之后看到的该会话下的短信记录,蓝色背景的为发出的短信,灰色背景的为收到的短信。

     

     为了显示各个会话下所有的短信记录,需要取得短信会话的会话id,即sms表中的字段“thread_id”,而在上一篇文章中,我们已经在MessageListAdapter的getMessageSessions()方法中取得了每个短信会话的id,因此,我们还是先回去看一下吧,下面在getMessageSessions()中,红色代码部分执行了从threads表获取会话id的操作

  /** 
     * 从mms数据库中检索threads表  
     */  
    public void getMessageSessions(){  
        Cursor sessionCursor = null;
        ContentResolver resolver = null; 
        ContactData contact = null;
        
        try{
               Uri uri = Uri.parse(SMS_URI_ALL);
            resolver = mContext.getContentResolver();
            sessionCursor = resolver.query(uri, new String[]  
            { "* from threads--" }, null, null, null);  
            
            if (sessionCursor == null) {
                return;
            }    
            if (sessionCursor.getCount() == 0){
                sessionCursor.close();
                sessionCursor = null;
                return;
            }
              
            sessionCursor.moveToFirst();
            while (sessionCursor.isAfterLast() == false)  
            {  
                /*
                threads表各字段含义如下:
                1._id为会话id,他关联到sms表中的thread_id字段。
                2.recipient_ids为联系人ID,这个ID不是联系人表中的_id,而是指向表canonical_address里的id,
                canonical_address这个表同样位于mmssms.db,它映射了recipient_ids到一个电话号码,也就是说,
                最终获取联系人信息,还是得通过电话号码;
                3.mesage_count该会话的消息数量
                4.snippet为最后收到或发出的信息                
                */
                
                int thread_idColumn = sessionCursor.getColumnIndex("_id");  
                int dateColumn = sessionCursor.getColumnIndex("date");  
                int message_countColumn = sessionCursor.getColumnIndex("message_count");  
                int snippetColumn = sessionCursor.getColumnIndex("snippet");  
                int typeColumn = sessionCursor.getColumnIndex("type");
                              
                //格式化短信日期显示  
                //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
                Date date = new Date(Long.parseLong(sessionCursor.getString(dateColumn)));    
                  
                //获得短信的各项内容  
                //phoneAndUnread[0]存放电话号码,phoneAndUnread[1]存放该会话中未读信息数
                String threadId = sessionCursor.getString(thread_idColumn);
                String phoneAndUnread[]=getPhoneNum(threadId);  
                String last_mms=sessionCursor.getString(snippetColumn);  
                //String date_mms=dateFormat.format(date);  
                String date_mms=date.toString();  
                String count_mms=sessionCursor.getString(message_countColumn);  
                String type = sessionCursor.getString(typeColumn);
                
                SMSInfo smsinfo = new SMSInfo();
                
                /*  
                phoneAndUnread[0]存放电话号码 
                */ 
                contact = getContactFromPhoneNum(mContext, phoneAndUnread[0]); 
                  
                //获得最后的未读短信与已读短信  
                //String final_count="("+phoneAndUnread[1]+"/"+count_mms+")";  
                  
                //将会话信息添加到信息列表中
                //判断是否联系人,若为联系人显示其名称,若不是则显示号码                                 
                if (contact.getContactName().equals("")){  
                    smsinfo.setContactMes(phoneAndUnread[0]);                                        
                }else{  
                    smsinfo.setContactMes(contact.getContactName());
                }  
               
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值