Android:发送短信(使用发件箱)

时间:2010-07-05 11:39:26

标签: android sms

我正在开发一款适用于Android的短信应用程序,无疑需要发送短信(请参考!)

现在,我知道网上有很多来源描述使用SmsManager发送短信......但是,显然,当使用该方法时,短信不会存储在“SENT”文件夹中。 。这是SMS应用程序的基本要求。

如何将(消息的)条目添加到“发件箱”中,以便它被发送(并自动存储在SENT文件夹中).... 字段“_id,threadid,read,status,type,service_center”(消息表的属性)的值是什么?

也欢迎任何其他选择。 :) 在此先感谢...

4 个答案:

答案 0 :(得分:4)

我一直在寻找围绕这个问题的工作。发送短信后添加以下代码行...这将在本机短信应用程序的发件箱中创建一个条目

ContentValues values = new ContentValues();

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

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

我想从ppl那里得到帮助,他们可以告诉我们如何使用这个内容提供商为多个接收器进行输入...谢谢..

答案 1 :(得分:1)

  

但是,显然,在使用它时   方法,短信不存储在   “SENT”文件夹......这是一种   短信的基本要求   应用

“SENT”文件夹的概念是应用程序的一个功能,而不是操作系统。如果您希望创建自己的SMS客户端应用程序,请创建自己的“SENT”文件夹作为该应用程序的功能。您知道要发送的邮件,因此您可以将它们存储在任何您喜欢的位置(例如,SQLite数据库)。

如果要发送短信并将其显示在用户所选SMS客户端的“SENT”文件夹中,请不要使用SmsManager。相反,请使用ACTION_SENDTO并让用户选择的短信客户端发送消息,如this sample project所示。

答案 2 :(得分:0)

Android send SMS which is visible in SMS thread (no GUI)有答案,它使用ContentResolver和android.permission.WRITE_SMS

答案 3 :(得分:0)

至少在6.0和7.0上,系统应用com.android.phone负责存储其他应用发送的消息。不幸的是,这个功能被一些制造商打破了,这就是我们看不到发送消息的原因。

它确实适用于AVD。请参阅com.android.internal.telephony.SMSDispatcher中的方法persistSentMessageIfRequired()

只有此应用或所选的默认短信应用才具有对短信内容提供商的写入权限。当您使用SMS应用程序发送它时,它会直接调用insert()。当您在应用中使用SmsManager时,系统应用com.android.phone会以某种方式获得通知,执行发送,然后存储已发送的消息。这里是callstack(我没有进一步挖掘):

  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)