我想发送短信,但不使用SmsManager类。我想用Android手机上的原生短信应用程序来做。
这就是扭曲:我不想在这样做时启动本机应用程序。是否有一些意图格式可以通过本机应用程序直接发送短信(给定sms-body和发送给它的电话号码)(用户不必点击'发送')。
我用谷歌搜索,但所有结果和响应只是启动本机短信,等待用户手动发送短信。我已经看到这在一些应用程序中实现,如'MightyText',并希望在我的应用程序中实现。
请帮忙!
答案 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();
}