使用本机短信应用程序发送短信而不启动自己

时间:2012-10-15 10:54:36

标签: android android-intent sms

我想发送短信,但不使用SmsManager类。我想用Android手机上的原生短信应用程序来做。

这就是扭曲:我不想在这样做时启动本机应用程序。是否有一些意图格式可以通过本机应用程序直接发送短信(给定sms-body和发送给它的电话号码)(用户不必点击'发送')。

我用谷歌搜索,但所有结果和响应只是启动本机短信,等待用户手动发送短信。我已经看到这在一些应用程序中实现,如'MightyText',并希望在我的应用程序中实现。

请帮忙!

5 个答案:

答案 0 :(得分:14)

使用SmsManager将通过系统发送短信,但不会像前面提到的那样将其放入SMS内容提供商。因此,任何本机消息传递应用程序都不会看到它。

为此,您必须在通过SmsManager正常发送消息后通过SMS内容提供商手动添加。以下是一些示例代码可供帮助:

ContentValues values = new ContentValues();
values.put("address", "+12345678"); // phone number to send
values.put("date", System.currentTimeMillis()+""); 
values.put("read", "1"); // if you want to mark is as unread set to 0
values.put("type", "2"); // 2 means sent message
values.put("body", "This is my message!");

Uri uri = Uri.parse("content://sms/");
Uri rowUri = context.getContentResolver().insert(uri,values);

就是这样。之后,您会注意到它已添加,本机消息传递应用程序正常显示它。

如果适合您,请点击“接受”答案。

答案 1 :(得分:5)

好的,所以你想发送短信,而不使用SmsManager,而且它应该显示在你原生的短信应用列表中?

首先,您无法绕过 SmsManager 发送短信。如果您查看Samsung Galaxy Nexus的所有本机消息传递应用程序的源代码,它将在按钮单击时调用SmsManager。

所以,上面公布的下面一段代码是正确的

SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);

其次,在发送消息后,原生应用将其置于 SMS ContentProvider

关注此How to save SMS to inbox in android?

谨慎的是,现在不支持添加此功能。因此,您可能不得不求助于将其添加到已发送的框中。

答案 2 :(得分:0)

如果您只有ACTION_SENDTO,那么当然会弹出任何可以发送的应用程序。

您需要为SMS添加过滤器

答案 3 :(得分:0)

我在我正在进行的项目中做了类似的事情。您需要使用SmsManager

会是这样的 -

        SmsManager smsManager = SmsManager.getDefault();

        smsManager.sendTextMessage(phoneNumber, null, message, null, null);

您可以使用它以编程方式发送短信。

答案 4 :(得分:0)

试试这个:

String phoneNo = textPhoneNo.getText().toString();
String sms = textSMS.getText().toString();



try {
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(phoneNo, null, sms, null, null);
    Toast.makeText(getApplicationContext(), "SMS Sent!",
        Toast.LENGTH_LONG).show();
} catch (Exception e) {
    Toast.makeText(getApplicationContext(),
        "SMS faild, please try again later!",
        Toast.LENGTH_LONG).show();
    e.printStackTrace();
}