为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

MMTTMM 2019-09-21 15:01:46

我已经编写了以下用于发送SMS消息的代码。


SmsManager smsManager = SmsManager.getDefault();

smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);

但这不是在收件箱中更新,我需要在收件箱中保存相同的消息,或者是否有任何方法可以调用本机SMS应用程序来发送SMS?


查看完整描述

3 回答

?
123456qqq

您可以使用sms内容提供程序来读取和写入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的一部分,因此出于多种原因,我强烈建议不要在公共应用程序中使用此类代码。


查看完整回答
反对 回复 2019-09-21
?
繁星coding

如果您想使用发件人名称手动将一些SMS放入收件箱,


  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"/>

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


查看完整回答
反对 回复 2019-09-21
?
烙印99

该代码适用于包括上述kitkat在内的所有Android版本(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


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信