2012-07-26 50 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