如何将短信保存到android收件箱?

我写下面的代码发送短信。

SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(destAddr, null, mMessageText, il, null); 

但是这不是在我的收件箱更新,我需要保存在收件箱相同的消息,或者有什么办法来调用本地SMS应用程序发送短信?

您可以使用短信内容提供商来读取和写入短信:

 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的一部分,所以我强烈build议不要在公共应用程序中使用这样的代码有几个原因 。

如果您想手动将一些短信发送到您的收件箱与发件人姓名然后,

  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); 

也join这些清单。

  <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.WRITE_SMS"/> 

现在,这段代码将添加短信给收件箱与一个定义的发件人的名字,所以你可以很容易地处理你的解决scheme的问题,

此代码将适用于所有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

 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); 

调用带有内容的本机SMS应用程序

 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);