我编写了以下代码来发送短信消息。
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);
但是这并没有在我的收件箱中更新,我需要将同样的消息保存在收件箱中, 或者有没有办法调用本机短信应用程序发送短信?
我编写了以下代码来发送短信消息。
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);
但是这并没有在我的收件箱中更新,我需要将同样的消息保存在收件箱中, 或者有没有办法调用本机短信应用程序发送短信?
您可以使用短信内容提供程序来读取和写入短信消息:
ContentValues values = new ContentValues();
values.put("address", "123456789");
values.put("body", "foo bar");
getContentResolver().insert(Uri.parse("content://sms/sent"), values);
我不知道你为什么想要编写一个你发送到收件箱的消息,但如果这是你想要的,只需将上述URI更改为"content://sms/inbox"即可。Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms://"));
sendIntent.putExtra("address", "123456789");
sendIntent.putExtra("sms_body", "foo bar");
startActivity(sendIntent);
编辑: 然而,sms://
内容提供程序不是SDK的一部分,因此我强烈建议不要在公共应用程序中使用这样的代码,原因有几个。
如果您想手动将某些短信放入收件箱并带有发件人姓名,则:
ContentValues values = new ContentValues();
values.put("address", "+923359110795");//sender name
values.put("body", "this is my text");
getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
也将它们添加到清单中。
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
现在这段代码将添加一个带有定义的发件人名称的短信到收件箱,因此您可以使用此解决方案轻松处理您的问题。
READ_SMS
真的需要吗?我只期望需要 WRITE_SMS
。 - Flow这段代码适用于所有的Android版本,包括kitkat(19)以上的版本。
public boolean saveSms(String phoneNumber, String message, String readState, String time, String folderName) {
boolean ret = false;
try {
ContentValues values = new ContentValues();
values.put("address", phoneNumber);
values.put("body", message);
values.put("read", readState); //"0" for have not read sms and "1" for have read sms
values.put("date", time);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Uri uri = Telephony.Sms.Sent.CONTENT_URI;
if(folderName.equals("inbox")){
uri = Telephony.Sms.Inbox.CONTENT_URI;
}
mActivity.getContentResolver().insert(uri, values);
}
else {
mActivity.getContentResolver().insert(Uri.parse("content://sms/" + folderName), values);
}
ret = true;
} catch (Exception ex) {
ex.printStackTrace();
ret = false;
}
return ret;
}
如何调用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
final String myPackageName = getPackageName();
if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName);
startActivityForResult(intent, 1);
}else {
saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
}
}else {
saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
}
onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
final String myPackageName = getPackageName();
if (Telephony.Sms.getDefaultSmsPackage(mActivity).equals(myPackageName)) {
//Write to the default sms app
saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
}
}
}
}
}
获取更多详细信息或示例应用,请访问以下链接: http://wisdomitsol.com/blog/android/sms/how-to-programmatically-save-sms-to-inbox-or-sent-in-android
ContentValues values = new ContentValues();
values.put("address", phoneNumber);
values.put("body", multimessage);
values.put("read", 1); //"0" for have not read sms and "1" for have read sms
Uri uri = Telephony.Sms.Sent.CONTENT_URI;
Activity ctx = this.cordova.getActivity();
ctx.getContentResolver().insert(uri, values);
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", "Content of the SMS goes here...");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
调用本地短信应用程序并附带内容