Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中将短信保存到收件箱?_Android_Sms - Fatal编程技术网

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

如何在android中将短信保存到收件箱?,android,sms,Android,Sms,我已经写了下面的代码发送短信 SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(destAddr, null, mMessageText, il, null); 但我的收件箱中没有更新,我需要在收件箱中保存相同的邮件, 或者有没有办法调用本机SMS应用程序来发送SMS 您可以使用短信内容提供商来读写短信: ContentValues values = new ContentValues();

我已经写了下面的代码发送短信

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);
但我的收件箱中没有更新,我需要在收件箱中保存相同的邮件,
或者有没有办法调用本机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的一部分,因此我强烈建议不要在公共应用程序中使用此类代码


如果您想手动将一些带有发件人姓名的短信发送到收件箱,请使用内容调用本机短信应用程序

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


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

此代码将适用于所有Android版本,包括上述kitkat(19)

如何呼叫

   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");
                }
            }
        }
    }
}
有关更多详细信息或示例应用程序,请访问以下链接:

短信内容提供商不是Android SDK的一部分。您的代码将在用自己的SMS客户端替换SMS客户端的设备上中断。您的代码可能会在Android的未来版本中中断。@Commonware:您知道这个问题是否有“官方”解决方案吗?处理未记录的API似乎确实有风险,但到目前为止,我找不到任何其他解决方案。很抱歉就这样一个老问题发帖,但是除了使用sms://cp,还有其他选择吗?我正在寻找这个,但这似乎是唯一的方法。我已经实现了上面提到的代码,它将邮件存储到收件箱中。但不知怎么的,我找不到储存的短信。而且我甚至没有收到任何类型的错误/异常。有人能帮忙吗?谢谢你advance@Lo'oris,@ereOn:以编程方式意味着您希望“通过代码”完成它。这是一个非常有效的词,在最近几年出版的大多数词典中都能找到。有时有必要区分我们偶尔从没有试图通过代码做某事的用户那里得到的问题。当然,这些问题属于超级用户,而不是这里。问题是有些任务要简单得多,而且通常不用编写一行代码就可以完成。澄清者阻止人们提供那些显而易见的答案。在你的链接中没有“更多信息”。这仅仅是对这个未经解释的答案的重复(这个答案本身似乎是其他很久以前发布的答案的副本)。再一次,你包含了一个到你自己网站的非公开链接。我已删除链接。是否真的需要
READ\u SMS
?我希望只需要
WRITE\u SMS
。@Flow亲爱的,同时使用这两种权限,有时会出现问题,因此如果您同时写入这两种权限会更好,否则我认为可以在不读取\u SMS的情况下完成。请将我的\u值编辑为值,或者也需要反向读取\u SMS,我还以为写短信就可以了,但它崩溃了。@sports是的,你是对的,没有写短信可能会产生bug。使用有什么区别content://sms/ ? 我很感兴趣,因为我注意到创建未读短信不会触发任何本机通知。这样会触发一些通知吗?
   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");
    }
@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");
                }
            }
        }
    }
}
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);