1

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

这是一个转折点:我不想在执行此操作时启动本机应用程序。是否有某种格式的意图可以通过本机应用程序直接发送短信(给定短信正文和要发送到的电话号码)(用户无需单击“发送”)。

我用谷歌搜索了相同的内容,但所有结果和响应都只是启动了原生短信,等待用户手动发送短信。我已经看到这在某些应用程序中实现,例如“MightyText”,并希望在我的应用程序中实现。

请帮忙 !

4

5 回答 5

14

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

为此,您必须在通过 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);

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

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

于 2012-10-23T12:40:21.557 回答
5

好的,所以您想在不使用 SmsManager 的情况下发送 SMS,并且它应该显示在您的本地 SMS 应用程序列表中?

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

因此,上面发布的以下代码是正确的

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

其次,发送消息后,原生应用将其放入SMS ContentProvider中

按照这个如何在android中将短信保存到收件箱?

需要注意的是,现在不支持添加此功能。因此,您可能不得不求助于黑客将其添加到已发送的框中。

于 2012-10-22T04:23:38.670 回答
0

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

您需要为短信添加过滤器

于 2012-10-15T11:22:53.477 回答
0

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

会是这样的——

        SmsManager smsManager = SmsManager.getDefault();

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

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

于 2012-10-21T17:31:11.183 回答
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();
}
于 2014-02-12T07:29:38.963 回答