2010-07-05 34 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)