Android的保存或编程方式插入的内容提供商MMS [英] Android save or insert MMS in content provider programmatically

查看:330
本文介绍了Android的保存或编程方式插入的内容提供商MMS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想code如下所述,我从互联网上得到它。它插入行中正常,但彩信未显示本机应用信息内容提供商(mmssms.db)。

11的thread_id已经是present在我的内容提供商,所以我使用的thread_id 11。

 公共静态乌里插入(上下文的背景下,字符串,字符串主题,字节[] imageBytes)
{
    尝试
    {
        乌里destUri = Uri.parse(内容:// MMS);        //获取线程ID
        //设置<串GT;收件人=新的HashSet<串GT;();
        //recipients.addAll(Arrays.asList(to));
        长的thread_id = getOrCreateThreadId(背景下,);
        Log.e(>>>>>>>中,线程ID为+的thread_id);        //创建一个虚拟的短信
        ContentValues​​ dummyValues​​ =新ContentValues​​();
        dummyValues​​.put(thread_id单的thread_id);
        dummyValues​​.put(身体,虚拟短信的身体。);
        。乌里dummySms = context.getContentResolver()插入(Uri.parse(内容://短信/),dummyValues​​);        //创建一个新的消息条目
        长今= System.currentTimeMillis的();
        ContentValues​​ mmsValues​​ =新ContentValues​​();
        mmsValues​​.put(thread_id单的thread_id);
        mmsValues​​.put(日期,现在/ 1000L);
        mmsValues​​.put(msg_box,Mms.MESSAGE_BOX_OUTBOX);
        //mmsValues​​.put(\"m_id,返回System.currentTimeMillis());
        mmsValues​​.put(读,1);
        mmsValues​​.put(亚健康,一级学科);
        mmsValues​​.put(sub_cs,106);
        mmsValues​​.put(ct_t,应用程序/ vnd.wap.multipart.related);
        mmsValues​​.put(EXP,imageBytes.length);
        mmsValues​​.put(m_cls,个人);
        mmsValues​​.put(m_type,128); // 132(检索CONF)130(NOTIF IND)128(SEND REQ)
        mmsValues​​.put(V,19);
        mmsValues​​.put(PRI,129);
        mmsValues​​.put(tr_id,T+ Long.toHexString(现在));
        mmsValues​​.put(resp_st,128);        //插入消息
        乌里解析度= context.getContentResolver()插入(destUri,mmsValues​​)。
        字符串MESSAGEID = res.getLastPathSegment()修剪()。
        Log.e(>>>>>>>中,信息保存为+ RES);        //创建部分
        createPart(背景下,MESSAGEID,imageBytes);
        createAddr(背景下,MESSAGEID,至);
        //解析度= Uri.parse(destUri +/+ MESSAGEID);        //删除假短信
        。context.getContentResolver()删除(dummySms,NULL,NULL);        返回水库;
    }
    赶上(例外五)
    {
        e.printStackTrace();
    }    返回null;
}私有静态乌里createPart(上下文的背景下,字符型,字节[] imageBytes)抛出异常
{
    ContentValues​​ mmsPartValue =新ContentValues​​();
    mmsPartValue.put(中间,ID);
    mmsPartValue.put(CT,图像/ PNG);
    mmsPartValue.put(CID,&下;+ System.currentTimeMillis的()+>中);
    乌里partUri = Uri.parse(内容:// MMS /+身份证+/部分);
    乌里解析度= context.getContentResolver()插入(partUri,mmsPartValue)。
    Log.e(>>>>>>>中,部分URI为+ res.toString());    //数据添加到部分
    OutputStream的OS = context.getContentResolver()openOutputStream(RES)。
    ByteArrayInputStream的是=新ByteArrayInputStream进行(imageBytes);
    字节[]缓冲区=新的字节[256];
    对(INT LEN = 0;(LEN = is.​​read(缓冲液))= -1;!)
    {
        os.write(缓冲液,0,LEN);
    }
    os.close();
    is.close();    返回水库;
}私有静态乌里createAddr(上下文的背景下,ID字符串,字符串地址)抛出异常
{
    ContentValues​​ addrValues​​ =新ContentValues​​();
    addrValues​​.put(地址,地址);
    addrValues​​.put(字符集,106);
    addrValues​​.put(式,151); // 至
    乌里addrUri = Uri.parse(内容:// MMS /+身份证+/地址);
    乌里解析度= context.getContentResolver()插入(addrUri,addrValues​​)。
    Log.e(>>>>>>>中,地址URI为+ res.toString());    返回水库;
}
@燮pressLint(NewApi)
私有静态长getOrCreateThreadId(上下文的背景下,字符串收件人)抛出异常
{    返回11;
}


解决方案

在Android 4.4系统只默认邮件应用程序可以写短信和彩信内容的解析器,所以也许你试过在设备与Android 4.4或以上
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

I am trying code described below, I got it from internet. It inserts rows in content provider(mmssms.db) properly but MMS is not shown Native Messaging App.

thread_id 11 is already present in my content provider so I am using thread_id 11.

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, to);
        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/"), 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", Mms.MESSAGE_BOX_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);


        createAddr(context, messageId, to);


        //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;
}
@SuppressLint("NewApi") 
private static long getOrCreateThreadId(Context context, String recipients) throws Exception
{

    return 11;
}

解决方案

On Android 4.4 only default message app can write to sms and mms content resolvers, so maybe you tried on device with Android 4.4 or older http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

这篇关于Android的保存或编程方式插入的内容提供商MMS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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