Monitor MMS

    • Monitor incoming mms event
    • Parse MMS
      The mms/sms are stored in SQLite file
      /data/data/com.android.providers.telephony/databases/mmssms.db 
      /data/data/com.android.providers.telephony/app_parts/*
      mmssms.db srotes the sms and mms information, and the files under app_parts stores the files attached in MMS.
      Other application has no permission to access that database file, we only can read mms/sms throung content provider.

      Sample code:
      Cursor curPdu = getContentResolver().query(Uri.parse("content://mms"), null, null, null, null);
      int id = curPdu.getInt(curPdu.getColumnIndex("_id"));
      int thread_id = curPdu.getInt(curPdu.getColumnIndex("thread_id"));
      String subject = curPdu.getString(curPdu.getColumnIndex("sub");
      int date = curPdu.getInt(curPdu.getColumnIndex("date"));

      //Delete mms
      getContentResolver().delete(Uri.parse("content://mms/" + Integer.toString(id)));

      String selectionAddr = new String("msg_id='" + Integer.toString(id) + "'");
      Uri uriAddr = Uri.parse("content://mms/" + curPdu.getString(curPdu.getColumnIndex("_id")) + "/addr"); //use provider 'content://mms/#/addr' to get address
      Cursor curAddr = getContentResolver().query(Uri.parse(uriAddr, null, selectionAddr, null, null);
      String contact_id = curAddr.getString(curAddr.getColumnIndex("contact_id"));
      String address = curAddr.getString(curAddr.getColumnIndex("address"));

      String selectionPart = new String("mid='" + Integer.toString(id) + "'");
      Cursor curPart = getContentResolver().query(Uri.parse("content://mms/part"), null, selectionPart, null, null);
      /*
      //You can also use following code
      Cursor curPart = getContentResolver().query(Uri.parse("content://mms/" + Integer.toString(id) + "/part"), null,null , null, null);
      */
      while(curPart.moveToNext())
      {
          String type = curPart.getString(curPart.getColumnIndex("ct"));  //content type
          String attachmentpath = curPart.getString(curPart.getColumnIndex("_data"));
          String cid = curPart.getString(curPart.getColumnIndex("cid"));

          if (cid.euqals("<text_0>")  //Current row stores MMS body
          {
              String body = curPart.getString(curPart.getColumnIndex("text"));
          }
          else if (!attachmentpath.euqals(null))  //Current row stores MMS  attachment, following code is used to read the attachment file
          {
              int _partID = curPart.getInt(curPart.getColumnIndex("_id"));
              String partID = String.valueOf(_partID);
              Uri partURI = Uri.parse("content://mms/part/" + partID);
                          
              ByteArrayOutputStream baos = new ByteArrayOutputStream();  //This is attachment
              InputStream is = null;

              try 
              {
                  is = getContentResolver().openInputStream(partURI);
                  byte[] buffer = new byte[256];
                  int len = is.read(buffer);
                  while (len >= 0) 
                  {
                      baos.write(buffer, 0, len);
                      len = is.read(buffer);
                  }
              } 
              catch (IOException e) 
              {
              } 
              finally 
              {
                  if (is != null) 
                  {
                      try 
                      {
                          is.close();
                      } catch (IOException e) {} 
                  }
              }
          }
      }

      if (curPart.moveToFirst())
      do 
      {
          
      }

      Declare permission
      <uses-permission android:name="android.permission.READ_SMS" />
    • Others
      1. About what tables are created in mmssms.db
        1. adb pull /data/data/com.google.providers.telephony/databases/mmssms.db .
        2. strings mmssms.db  > tmp.txt
        3. vi tmp.txt, and search 'CREATE TABLE'
      2. All avaliable native providers on Android
        http://dislab.hufs.ac.kr/wiki/Android/Native_Providers
      3. ...
    • ...

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值