获取Android手机中所有的短信

http://android.tgbus.com/Android/tutorial/201104/349808.shtml

 昨天有朋友问如何获取Android手机中所有的短信,小编回去研究了一下,下面为大家进行讲解:

Java代码:


public String getSmsInPhone()   

{   

    final String SMS_URI_ALL   = "content://sms/";     

    final String SMS_URI_INBOX = "content://sms/inbox";   

    final String SMS_URI_SEND  = "content://sms/sent";   

    final String SMS_URI_DRAFT = "content://sms/draft";   

       

    StringBuilder smsBuilder = new StringBuilder();   

       

    try{   

        ContentResolver cr = getContentResolver();   

        String[] projection = new String[]{"_id", "address", "person",    

                "body", "date", "type"};   

        Uri uri = Uri.parse(SMS_URI_ALL);   

        Cursor cur = cr.query(uri, projection, null, null, "date desc");   

  

        if (cur.moveToFirst()) {   

            String name;    

            String phoneNumber;          

            String smsbody;   

            String date;   

            String type;   

            

            int nameColumn = cur.getColumnIndex("person");   

            int phoneNumberColumn = cur.getColumnIndex("address");   

            int smsbodyColumn = cur.getColumnIndex("body");   

            int dateColumn = cur.getColumnIndex("date");   

            int typeColumn = cur.getColumnIndex("type");   

            

            do{   

                name = cur.getString(nameColumn);                

                phoneNumber = cur.getString(phoneNumberColumn);   

                smsbody = cur.getString(smsbodyColumn);   

                   

                SimpleDateFormat dateFormat = new SimpleDateFormat(   

                        "yyyy-MM-dd hh:mm:ss");   

                Date d = new Date(Long.parseLong(cur.getString(dateColumn)));   

                date = dateFormat.format(d);   

                   

                int typeId = cur.getInt(typeColumn);   

                if(typeId == 1){   

                    type = "接收";   

                } else if(typeId == 2){   

                    type = "发送";   

                } else {   

                    type = "";   

                }   

                

                smsBuilder.append("[");   

                smsBuilder.append(name+",");   

                smsBuilder.append(phoneNumber+",");   

                smsBuilder.append(smsbody+",");   

                smsBuilder.append(date+",");   

                smsBuilder.append(type);   

                smsBuilder.append("] ");   

                

                if(smsbody == null) smsbody = "";     

            }while(cur.moveToNext());   

        } else {   

            smsBuilder.append("no result!");   

        }   

            

        smsBuilder.append("getSmsInPhone has executed!");   

    } catch(SQLiteException ex) {   

        Log.d("SQLiteException in getSmsInPhone", ex.getMessage());   

    }   

    return smsBuilder.toString();   

  注释:

  

  1、本函数用于获取手机中所有的短信,包括收件箱、发件箱、草稿箱等。

  

  2、本函数可以运行在Service子类中,因为未使用Activity类的相关函数。

  

  3、获取的短信包括:收发短信人名、手机号码、短信内容、短信发送接收的时间、短信的类型。

  

  sms主要结构:

  

  _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

  

  4、为了获取短信,需要在AndroidManifest.xml文件中添加权限使用说明,如下:

  

  <uses-permissionandroid:name="android.permission.READ_SMS"/>

  

  5、本函数在真机上测试通过。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值