Android 将发送的彩信插入发送框

Android 将发送的彩信插入发送框,android,mms,Android,Mms,我正在尝试将彩信插入已发送的数据库,但遗憾的是,我无法在本机android应用程序中查看彩信 我的插入代码: ContentValues values = new ContentValues(); values.put("thread_id", thread_id); values.put("date", time); values.put("read", true); //read status values.put("sub", text); //mms subject values.put

我正在尝试将彩信插入已发送的数据库,但遗憾的是,我无法在本机android应用程序中查看彩信

我的插入代码:

ContentValues values = new ContentValues();
values.put("thread_id", thread_id);
values.put("date", time);
values.put("read", true); //read status
values.put("sub", text); //mms subject
values.put("msg_box", 2); //message box. in this case outbox

Uri mmsUri = context.getContentResolver().
insert(Uri.parse("content://mms"), values);
Log.v("MMSProjectActivity", "Message saved at: " + mmsUri);

ContentValues mmsPartValue = new ContentValues();
mmsPartValue.put("ct", "image/jpeg"); //mime; for example image/jpeg
Uri picUri = picUris.get(0);
String [] fileNameSplit = picUri.toString().split("/");
String fileName = fileNameSplit[fileNameSplit.length-1] + ".jpg";

String messageId = mmsUri.getLastPathSegment().trim(); //id of MMS at content://mms
Uri partUri = Uri.parse("content://mms/" + messageId + "/part");

Uri mmsPartUri = context.getContentResolver().insert(partUri, mmsPartValue);
OutputStream os;
InputStream is;
try
{
    os = context.getContentResolver().openOutputStream(mmsPartUri);
is = context.getContentResolver().openInputStream(picUris.get(0));
byte[] buffer = new byte[256];
for (int len = 0; (len = is.read(buffer)) != -1; ) {
    os.write(buffer, 0, len);
}
} catch (FileNotFoundException e)
{
Log.v("MMSProjectActivity", "MMS not saved FileNotFoundException");
e.printStackTrace();
} catch (IOException e)
{
Log.v("MMSProjectActivity", "MMS not saved IOException");
    e.printStackTrace();
}

Log.v("MMSProjectActivity", "MMS part value saved at: " + mmsPartUri);

有人知道我做错了什么吗?

我想你需要的是源代码的一部分。 一般来说,看看谷歌是如何做到这一点的。。 具体来看一下这个方法

    private static Uri createDraftMmsMessage(PduPersister persister, SendReq sendReq,
        SlideshowModel slideshow) {
    try {
        PduBody pb = slideshow.toPduBody();
        sendReq.setBody(pb);
        Uri res = persister.persist(sendReq, Mms.Draft.CONTENT_URI);
        slideshow.sync(pb);
        return res;
    } catch (MmsException e) {
        return null;
    }
}
创建草稿(第一步)后,将草稿更新为“已发送”。通过调用另一个方法

 private static void updateDraftMmsMessage(Uri uri, PduPersister persister,
        SlideshowModel slideshow, SendReq sendReq) {
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("updateDraftMmsMessage uri=%s", uri);
    }
    if (uri == null) {
        Log.e(TAG, "updateDraftMmsMessage null uri");
        return;
    }
    persister.updateHeaders(uri, sendReq);
    final PduBody pb = slideshow.toPduBody();

    try {
        persister.updateParts(uri, pb);
    } catch (MmsException e) {
        Log.e(TAG, "updateDraftMmsMessage: cannot update message " + uri);
    }

    slideshow.sync(pb);
}
现在我知道你不能从你的应用程序中运行这段代码,因为你没有在源代码中编译,或者即使你是在源代码中编译,也可能是一个挑战(尽管我认为如果你在源代码中编译,如果你的代码正确,谷歌代码应该处理保存的东西)

在任何情况下,您都应该能够按照他们在此类中的操作将彩信保存在提供商中

干杯


并发布您的进度…

我认为您需要的是源代码的一部分。 一般来说,看看谷歌是如何做到这一点的。。 具体来看一下这个方法

    private static Uri createDraftMmsMessage(PduPersister persister, SendReq sendReq,
        SlideshowModel slideshow) {
    try {
        PduBody pb = slideshow.toPduBody();
        sendReq.setBody(pb);
        Uri res = persister.persist(sendReq, Mms.Draft.CONTENT_URI);
        slideshow.sync(pb);
        return res;
    } catch (MmsException e) {
        return null;
    }
}
创建草稿(第一步)后,将草稿更新为“已发送”。通过调用另一个方法

 private static void updateDraftMmsMessage(Uri uri, PduPersister persister,
        SlideshowModel slideshow, SendReq sendReq) {
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("updateDraftMmsMessage uri=%s", uri);
    }
    if (uri == null) {
        Log.e(TAG, "updateDraftMmsMessage null uri");
        return;
    }
    persister.updateHeaders(uri, sendReq);
    final PduBody pb = slideshow.toPduBody();

    try {
        persister.updateParts(uri, pb);
    } catch (MmsException e) {
        Log.e(TAG, "updateDraftMmsMessage: cannot update message " + uri);
    }

    slideshow.sync(pb);
}
现在我知道你不能从你的应用程序中运行这段代码,因为你没有在源代码中编译,或者即使你是在源代码中编译,也可能是一个挑战(尽管我认为如果你在源代码中编译,如果你的代码正确,谷歌代码应该处理保存的东西)

在任何情况下,您都应该能够按照他们在此类中的操作将彩信保存在提供商中

干杯


并发布您的进度…

一些错误日志会很有帮助:)没有错误日志显示…有趣。您能验证数据库是否插入了所有行吗。我是说你能确认你的记录已经保存了吗?插入后是否进行了验证?看一看:这就是彩信应用程序查询彩信内容的方式。。你在填所有的字段吗?是否保存pdu字段等?再看看谷歌的消息发送者:一些错误日志会很有帮助:)没有错误日志显示…有趣。你能验证一下数据库是否插入了所有的行吗。我是说你能确认你的记录已经保存了吗?插入后是否进行了验证?看一看:这就是彩信应用程序查询彩信内容的方式。。你在填所有的字段吗?是否保存pdu字段等?再看看谷歌的消息发送者:所以我或多或少能够让它工作,我不得不在数据库中添加一些字段,在遵循你的回答后,我需要从确认中提取一个消息id,并将消息再次移动到发送框中……出于某种原因,尽管我无法看到联系人的地址在对话表中查询时,我认为这与某些字段有关,我在某些时候无法正确更新这些字段……感谢您的帮助!兹韦比,您是否编辑问题中的相应更改,或者您可以发布您的答案。因此,我或多或少能够使其正常工作。我必须向该数据库添加一些字段,在遵循您的答案后,我需要从确认中提取消息id,并将消息再次持久保存到发送框中…出于某种原因,尽管我没有这样做在对话表中查询联系人地址时,可以看到联系人的地址,我认为这与某些字段有关,我在某些时候无法正确更新这些字段……感谢您的帮助!zwebie,你是编辑你的问题中的相应变化,还是发布你的答案。。