当前位置:  开发笔记 > Android > 正文

如何在Android中将短信保存到收件箱?

如何解决《如何在Android中将短信保存到收件箱?》经验,为你挑选了3个好方法。

我写了下面的代码来发送短信.

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

但这不是我的收件箱中更新,我需要在收件箱中保存相同的邮件,或者有没有办法调用本机短信应用程序发送短信?



1> Josef Pflege..:

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

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


SMS内容提供商不是Android SDK的一部分.您的代码将在使用自己的SMS客户端替换SMS客户端的设备上中断.您的代码可能会在Android的未来版本中中断.
@CommonsWare:你知道这个特殊问题是否有"官方"解决方案?处理未记录的API确实存在风险,但到目前为止我找不到任何其他解决方案.

2> Pir Fahim Sh..:

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

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

也在清单中添加这些.

 
 

现在,此代码将使用已定义的发件人名称将短信添加到收件箱中,因此您可以轻松处理此问题的解决方案,



3> Atif Mahmood..:

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

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有