2012-07-26 119 views
2

我想插入一个彩信到发送的数据库,但唉,我一直无法在原生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); 

任何人有任何想法,我究竟做错了什么?

+0

一些错误日志将是有益的:) – Tancho 2012-07-26 16:37:07

+0

没有错误日志显示... – zwebie 2012-07-26 16:40:14

+0

Interesting.can您确认该数据库拥有所有插入的行。我的意思是你能否确认你的记录已被保存?插入后是否验证过? 看看:http://gitorious.org/0xdroid/packages_providers_telephonyprovider/blobs/7236c3ad7ff01dd5ece14a2cabbf5ce3a570d793/src/com/android/providers/telephony/MmsProvider.java这是MMS应用程序如何查询MMS内容..你填写所有的领域?你是否在保存pdu字段等? 还可以看一下Google的邮件发件人:http://hi-android.info/src/com/android/mms/transaction/MmsMessageSender.java.html – Tancho 2012-07-26 22:58:16

回答

0

我觉得你需要的是this class的源代码。 一般看看他们是如何做到这一点在谷歌.. 具体来看看这个方法

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); 
} 

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

无论如何,你应该能够在提供者中按照他们在这个类中所做的来保存mms消息。

欢呼声......

,并发布你的进步...

+1

所以我或多或少的能够让它工作我不得不添加更多的字段到该数据库,并在按照您的答案后,我需要从确认中提取一个消息ID并移动将消息再次保存到发送的框中......由于某种原因,虽然我无法看到地址联系人在对话表中查询时,我认为这与某些领域有关,我不会在某些时候正确更新......感谢您的帮助! – zwebie 2012-07-29 10:49:17

+0

zwebie,你是否编辑你的问题的相应变化,或者你可以发布你的答案.. – 2013-04-02 07:02:03