2010-07-05 39 views
3

我正在爲Android,這無疑需要發送的短信短信應用程序(!去圖;)安卓:發送短信(使用發件箱)

現在,我知道有有的是源在描述使用SmsManager發送短信的網絡上......但是,顯然,使用該方法時,短信不存儲在「發送」文件夾中......這是SMS應用程序的基本要求。

如何向「發件箱」添加條目(發件箱),以便發送(並自動存儲在發送文件夾中).... 什麼是字段的值「_id ,threadid,read,status,type,service_center「(消息表的屬性)??

任何其他替代品也歡迎。 :) 在此先感謝...

回答

1

但是,很顯然,當使用 法,的短信不存儲在 「已發送」文件夾...這是怎樣的 基本要求一個SMS 應用程序。

「發送」文件夾的概念是應用程序的功能,而不是操作系統。如果您希望創建自己的SMS客戶端應用程序,請創建您自己的「SENT」文件夾作爲該應用程序的一項功能。你知道你發送了什麼消息,所以你可以將它們存儲在任何你喜歡的地方(例如,SQLite數據庫)。

如果您想要發送短信並讓它們出現在用戶選擇的SMS客戶端的「發送」文件夾中,請不要使用SmsManager。相反,使用ACTION_SENDTO,並且由用戶選擇的SMS客戶端發送消息,如this sample project所示。

+0

我已經探討了選擇,但我會喜歡使用內部的「SENT」文件夾...因此,即使用戶可以使用我的應用程序,他的消息仍然可以在內置的消息應用程序中看到。 – st0le 2010-07-06 04:04:37

+0

我不能使用ACTION_SENDTO,它必須使用我的GUI ...還有我的應用程序支持的其他功能... – st0le 2010-07-06 04:19:15

+0

@ st0le:Android中沒有單個「內置消息應用程序」。 HTC Sense有一個。 MOTOBLUR有一個。其他OEM層(例如索尼愛立信的Rachael)可能有他們的。此外,還有一個屬於開源項目的組件,它將顯示在Google體驗設備上(例如Nexus One)。 – CommonsWare 2010-07-06 10:59:32

4

我一直在尋找一個工作解決此問題。添加下面的代碼行發送短信後...這將使本地短信應用的發件箱中的條目

ContentValues values = new ContentValues(); 

values.put("address", number); 
values.put("body", desc); 

getApplicationContext().getContentResolver().insert(Uri.parse("content://sms/sent"), values); 

我想擺脫脂肪酶的幫助誰可以告訴如何使用該內容提供商使多個接收器的條目...謝謝..

0

至少在6.0和7.0系統應用程序com.android.phone負責存儲由其他應用程序發送的消息。不幸的是,這個功能被一些製造商打破了,這就是爲什麼我們沒有看到發送的消息。

它在AVD上工作。請參閱com.android.internal.telephony.SMSDispatcher中的方法persistSentMessageIfRequired()

只有這個應用程序或選定的默認短信應用程序對SMS內容提供商具有寫入權限。當您使用短信應用程序發送它時,它直接呼叫insert()。當您在您的應用中使用SmsManager時,系統應用com.android.phone會以某種方式得到通知,執行發送並存儲發送的消息。短信發送後

at android.os.Handler.obtainMessage(Handler.java:293) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.sendSmsByPstn(GsmSMSDispatcher.java:291) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.sendSms(GsmSMSDispatcher.java:274) 
    at com.android.internal.telephony.SMSDispatcher.sendRawPdu(SMSDispatcher.java:999) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.sendText(GsmSMSDispatcher.java:198) 
    at com.android.internal.telephony.ImsSMSDispatcher.sendText(ImsSMSDispatcher.java:206) 
    at com.android.internal.telephony.IccSmsInterfaceManager.sendTextInternal(IccSmsInterfaceManager.java:452) 
    at com.android.internal.telephony.IccSmsInterfaceManager.sendText(IccSmsInterfaceManager.java:393) 
    at com.android.internal.telephony.UiccSmsController.sendTextForSubscriber(UiccSmsController.java:136) 
    at com.android.internal.telephony.ISms$Stub.onTransact(ISms.java:201) 
    at android.os.Binder.execTransact(Binder.java:565) 

,應用程序職位Handler消息本身:這裏是調用堆棧(我沒有進一步挖掘)

 at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343) 
    at com.android.providers.telephony.SmsProvider.insertInner(SmsProvider.java:618) 
    at com.android.providers.telephony.SmsProvider.insert(SmsProvider.java:442) 
    at android.content.ContentProvider$Transport.insert(ContentProvider.java:264) 
    at android.content.ContentResolver.insert(ContentResolver.java:1274) 
    at com.android.internal.telephony.SMSDispatcher$SmsTracker.persistSentMessageIfRequired(SMSDispatcher.java:1445) 
    at com.android.internal.telephony.SMSDispatcher$SmsTracker.persistOrUpdateMessage(SMSDispatcher.java:1476) 
    at com.android.internal.telephony.SMSDispatcher$SmsTracker.onSent(SMSDispatcher.java:1537) 
    at com.android.internal.telephony.SMSDispatcher.handleSendComplete(SMSDispatcher.java:638) 
    at com.android.internal.telephony.SMSDispatcher.handleMessage(SMSDispatcher.java:274) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.handleMessage(GsmSMSDispatcher.java:108) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)