Android的MMS添加到数据库 [英] Android add MMS to database

查看:160
本文介绍了Android的MMS添加到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想添加一些彩信到我的设备数据库。

I want to add some MMS messages into my device database.

我有以下code,但它并没有在所有的工作。无条目添加到本机应用程序...

I've the following code but it doesn't work at all. No entry are added into the native app...

public static Uri insert(Context context, String[] to, String subject, Uri messageUri)
{
    try
    {
        Uri destUri = Uri.parse("content://mms/sent");

        // Get thread id
        Set<String> recipients = new HashSet<String>();
        recipients.addAll(Arrays.asList(to));
        long thread_id = getOrCreateThreadId(context, recipients);
        Log.e(">>>>>>>", "Thread ID is " + thread_id);

        // Create a dummy sms
        ContentValues dummyValues = new ContentValues();
        dummyValues.put("thread_id", thread_id);
        dummyValues.put("body", "Dummy SMS body.");
        Uri dummySms = context.getContentResolver().insert(Uri.parse("content://sms/sent"), dummyValues);

        // Create a new message entry
        ContentValues mmsValues = new ContentValues();
        mmsValues.put("thread_id", thread_id);
        mmsValues.put("date", System.currentTimeMillis()/1000);
        mmsValues.put("ct_t", "application/vnd.wap.multipart.related");
        mmsValues.put("read", "1");
        mmsValues.put("sub", subject);

        // Create part
        long dummyId = System.currentTimeMillis();
        createPart(context, dummyId, imageBytes);

        // Insert message
        Uri res = context.getContentResolver().insert(destUri, mmsValues);
        String messageId = res.getLastPathSegment().trim();
        Log.e(">>>>>>>", "Message saved as " + res);

        // Update part
        ContentValues updateValues = new ContentValues();
        updateValues.put("mid", messageId);
        Uri updateUri = Uri.parse("content://mms/" + dummyId + "/part");
        int mmsPartRows = context.getContentResolver().update(updateUri, updateValues, null, null);
        Log.e(">>>>>>>", "Part rows " + mmsPartRows);

        // Create addresses
        for (String addr : to)
        {
            ContentValues addrValues = new ContentValues();
            addrValues.put("address", addr);
            addrValues.put("charset", "106");
            addrValues.put("type", 151); // TO
            Uri addrUri = Uri.parse("content://mms/"+ messageId +"/addr");
            Uri mmsAddrUri = context.getContentResolver().insert(addrUri, addrValues);
            Log.e(">>>>>>>", "Addr uri is " + mmsAddrUri.toString());
        }

        res = Uri.parse(destUri + "/" + messageId);

        // Delete dummy sms
        context.getContentResolver().delete(dummySms, null, null);

        return res;
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return null;
}

private static Uri createPart(Context context, long id, byte[] imageBytes) throws Exception
{
    ContentValues mmsPartValue = new ContentValues();
    mmsPartValue.put("ct", "image/png");
    Uri partUri = Uri.parse("content://mms/" + id + "/part");
    Uri res = context.getContentResolver().insert(partUri, mmsPartValue);
    Log.e(">>>>>>>", "Part uri is " + res.toString());

    // Add data to part
    OutputStream os = context.getContentResolver().openOutputStream(res);
    ByteArrayInputStream is = new ByteArrayInputStream(imageBytes);
    byte[] buffer = new byte[256];
    for (int len=0; (len=is.read(buffer)) != -1;)
    {
        os.write(buffer, 0, len);
    }
    os.close();
    is.close();

    return res;
}

private static long getOrCreateThreadId(Context context, String[] numbers)
{
    HashSet<String> recipients = new HashSet<String>();
    recipients.addAll(Arrays.asList(numbers));
    return Telephony.Threads.getOrCreateThreadId(context, recipients);
}

  • 上下文是我的看法方面
  • 是一个字符串数组包含地址(如:新的String [] {0612345678,0623456789})
  • 主题是我的彩信主题,如通过发送的MyApp
  • messageUri 是一个开放的指向我想送我的SD卡中的图片。
    • context is my view context
    • to is a string array containing the addresses (eg. new String[] {"0612345678", "0623456789"})
    • subject is my MMS subject such as "Sent via MyApp"
    • messageUri is an Uri pointing to the image I want to send on my SD card.
    • 难道我做错了?

      推荐答案

      最后,我发现怎么做的工作! 这里是code我做了。

      Finally I found how to do the job ! Here is the code I made.

      告诉我,如果你有一些麻烦与此有关。

      Tell me if you got some troubles with this.

      public static Uri insert(Context context, String[] to, String subject, byte[] imageBytes)
      {
          try
          {           
              Uri destUri = Uri.parse("content://mms");
      
              // Get thread id
              Set<String> recipients = new HashSet<String>();
              recipients.addAll(Arrays.asList(to));
              long thread_id = getOrCreateThreadId(context, recipients);
              Log.e(">>>>>>>", "Thread ID is " + thread_id);
      
              // Create a dummy sms
              ContentValues dummyValues = new ContentValues();
              dummyValues.put("thread_id", thread_id);
              dummyValues.put("body", "Dummy SMS body.");
              Uri dummySms = context.getContentResolver().insert(Uri.parse("content://sms/sent"), dummyValues);
      
              // Create a new message entry
              long now = System.currentTimeMillis();
              ContentValues mmsValues = new ContentValues();
              mmsValues.put("thread_id", thread_id);
              mmsValues.put("date", now/1000L);
              mmsValues.put("msg_box", MESSAGE_TYPE_OUTBOX);
              //mmsValues.put("m_id", System.currentTimeMillis());
              mmsValues.put("read", 1);
              mmsValues.put("sub", subject);
              mmsValues.put("sub_cs", 106);
              mmsValues.put("ct_t", "application/vnd.wap.multipart.related");
              mmsValues.put("exp", imageBytes.length);
              mmsValues.put("m_cls", "personal");
              mmsValues.put("m_type", 128); // 132 (RETRIEVE CONF) 130 (NOTIF IND) 128 (SEND REQ)
              mmsValues.put("v", 19);
              mmsValues.put("pri", 129);
              mmsValues.put("tr_id", "T"+ Long.toHexString(now));
              mmsValues.put("resp_st", 128);
      
              // Insert message
              Uri res = context.getContentResolver().insert(destUri, mmsValues);
              String messageId = res.getLastPathSegment().trim();
              Log.e(">>>>>>>", "Message saved as " + res);
      
              // Create part
              createPart(context, messageId, imageBytes);
      
              // Create addresses
              for (String addr : to)
              {
                  createAddr(context, messageId, addr);
              }
      
              //res = Uri.parse(destUri + "/" + messageId);
      
              // Delete dummy sms
              context.getContentResolver().delete(dummySms, null, null);
      
              return res;
          }
          catch (Exception e)
          {
              e.printStackTrace();
          }
      
          return null;
      }
      
      private static Uri createPart(Context context, String id, byte[] imageBytes) throws Exception
      {
          ContentValues mmsPartValue = new ContentValues();
          mmsPartValue.put("mid", id);
          mmsPartValue.put("ct", "image/png");
          mmsPartValue.put("cid", "<" + System.currentTimeMillis() + ">");
          Uri partUri = Uri.parse("content://mms/" + id + "/part");
          Uri res = context.getContentResolver().insert(partUri, mmsPartValue);
          Log.e(">>>>>>>", "Part uri is " + res.toString());
      
          // Add data to part
          OutputStream os = context.getContentResolver().openOutputStream(res);
          ByteArrayInputStream is = new ByteArrayInputStream(imageBytes);
          byte[] buffer = new byte[256];
          for (int len=0; (len=is.read(buffer)) != -1;)
          {
              os.write(buffer, 0, len);
          }
          os.close();
          is.close();
      
          return res;
      }
      
      private static Uri createAddr(Context context, String id, String addr) throws Exception
      {
          ContentValues addrValues = new ContentValues();
          addrValues.put("address", addr);
          addrValues.put("charset", "106");
          addrValues.put("type", 151); // TO
          Uri addrUri = Uri.parse("content://mms/"+ id +"/addr");
          Uri res = context.getContentResolver().insert(addrUri, addrValues);
          Log.e(">>>>>>>", "Addr uri is " + res.toString());
      
          return res;
      }
      

      这篇关于Android的MMS添加到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆