首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

要在Android中将短信保存到收件箱,您需要使用广播接收器(BroadcastReceiver)来监听短信的到达事件。以下是一个简单的示例,展示了如何实现这个功能:

  1. 首先,在AndroidManifest.xml文件中添加以下权限和广播接收器:
代码语言:xml
复制
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<receiver android:name=".SmsReceiver">
   <intent-filter>
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>
  1. 创建一个名为SmsReceiver的Java类,并继承自BroadcastReceiver:
代码语言:java
复制
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // 获取短信内容
        Bundle bundle = intent.getExtras();
        SmsMessage[] messages = null;
        String strMessage = "";

        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            messages = new SmsMessage[pdus.length];

            for (int i = 0; i < pdus.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], "3gpp");
                strMessage += messages[i].getMessageBody();
            }

            // 将短信保存到收件箱
            String address = messages[0].getDisplayOriginatingAddress();
            String body = strMessage;
            String time = messages[0].getTimestampMillis() + "";
            saveSmsToInbox(context, address, body, time);

            // 显示收到的短信内容
            Toast.makeText(context, "收到短信:" + strMessage, Toast.LENGTH_SHORT).show();
        }
    }

    // 将短信保存到收件箱
    private void saveSmsToInbox(Context context, String address, String body, String time) {
        ContentValues values = new ContentValues();
        values.put("address", address);
        values.put("body", body);
        values.put("date", time);
        context.getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
    }
}

这个示例中,我们创建了一个名为SmsReceiver的广播接收器,用于监听短信到达事件。当收到短信时,我们将短信内容保存到收件箱中,并显示收到的短信内容。

注意:在Android 6.0(API 23)及更高版本的设备上,需要在运行时请求WRITE_EXTERNAL_STORAGE权限。具体实现方式可以参考官方文档

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云短信:腾讯云短信提供国内短信发送、国际/港澳台短信发送、短信签名、短信模板、短信回复等服务。
  • 腾讯云移动应用与游戏解决方案:腾讯云移动应用与游戏解决方案提供移动应用开发、游戏开发、推送服务、CDN加速、安全防护等服务。
  • 腾讯云即时通信 IM:腾讯云即时通信 IM 提供高效、稳定、安全的即时通讯服务,支持多种通信场景和消息类型。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • outlook mac苹果电脑版本

    在办公软件的系列中,相对于Word、Excel、PPT,outlook软件可能很多朋友接触不到。它是一个主要的邮件传输和协作客户端产品。今天给大家带来的是outlook mac版,即outlook 2021 for mac,这是outlook软件的最新版本,功能很多。你可以用它来收发电子邮件、管理联系信息、记日记、安排日程、分配任务等。与其他邮箱的web客户端相比,outlook mac Edition拥有强大的收件箱规则,可以让你过滤整理邮件,彻底过滤掉不想接收的信息。Outlook 2016还可以帮助您查找和整理信息,让您无缝使用Office应用程序,让您更快、更方便地交流和共享信息。现在,如果你需要一个全能的邮箱管理软件,outlook认为它是你的最佳选择。 mac版outlook 2021目前比较新的版本,

    02

    CEMAPI实战攻略(二)——建立与短信信箱的连接

    上一部分已经讨论过,如何搭建开发和测试环境,以及如何初始化CEMAPI,再继续这一部分的讨论之前,我们先要澄清几个概念。第一个是会话(Seesion),相信开发网络应用的朋友都不陌生,为了提高通讯效率降低通讯开销,有时候我们需要再目标与本地之间创建一个通道,在通道创建之初,目标与本地先做一些列的响应和请求确认两边的身份,当通道建立以后,目标与本地之间的通讯过程中就不再涉及两边的身份确认,这通常目标与本地之间的建立的通道,通常被称作会话,也就是Session。在使用Cemapi读取短信之前,应用程序也需要与设备上的信息(邮件)系统之间建立一个Session,用以 确认双方的身份,这是采用Cemapi读取短信的第一步。第二个概念是短消息(邮件)仓库(MsgStore),在WM中,邮件和短消息是属于一个系统的,Session建立了与这个系统之间的连接,然后必须告诉系统,我们的程序是要对邮件功能进行操作,还是要对短信功能进行操作,通过调用相应的函数(后面会介绍),MsgStore会指向我们需要操作的短信或邮件的仓库上。第三个概念是信箱,或者叫文件夹(Folder),当获得了指向一个具体仓库的MsgStore以后,下一步就需要获取具体的信箱(文件夹)了,比如当程序确定了希望对收件箱还是发件箱进行操作以后,Folder将会指向我们想要操作的具体的信箱。

    02

    Android开发笔记(一百)折叠式列表

    经常看朋友圈的动态,有的动态内容较多就只展示前面一段,如果用户想看完整的再点击展开,这样整个页面的动态列表比较均衡,不会出现个别动态占用大片屏幕的情况。同样,查看博客的文章列表也类似,只展示文章开头几行内容,有需要再点击加载全篇文章。 动态列表直接使用ListView,动态内容就得自己写个控件了,自定义控件的难点在于如何把握动态下拉和收起的动画。这里我们要先预习TextView的相关函数,下面是本文用到的方法说明: getHeight : 获取TextView的显示高度。 setHeight : 设置TextView的显示高度。 getLineHeight : 获取每行文本的高度。 getLineCount : 获取所有文本的行数。 如果一开始每条动态默认显示四行,那么默认显示高度是getLineHeight*4,使用setHeight方法即可设置动态的初始显示高度。点击展开动态全文时,就得显示所有行的文本,整个文本的高度是getLineHeight*getLineCount。现在有了每条动态的初始高度,以及动态全文的完整高度,再加个拉伸动画就差不多了。拉伸动画的主要工作是随着时间的推移,给TextView设置渐增或渐减的高度,这要重写Animation的applyTransformation方法。 下面是点击监听器的显示动画代码示例:

    04

    SMTP邮件发送命令

    第一步,远程登录smtp服务器 在命令行窗口输入 telnet smtp.163.com 25 然后回车 第二步,用户登录 输入 helo 163.com 回车,这是向服务器表明你的用户身份 250 OK 为服务器返回的确认信息,说明服务器认可了你的身份 输入 auth login 回车,这是告诉服务器你要输入用户名了(即登录邮箱时的用户名),服务器将返回一个确认信息334 这时就可以输入用户名了,注意这里的用户名需要编码后才能识别,即如果你的用户名是 fatbear@qq.com 那么你需要将fatbear进行 base64 编码,将编码结果输入命令提示符窗口。base64编码器可以在网上下到,是一个简单的小工具。 用户名输入成功后服务器返回一个334的确认信息。 用户名输入成功后,接着输入密码,密码同样是需经过 base64 编码后再输入。输入成功后服务器返回一个含‘successful’的信息,说明成功登录。 第三步,写信 输入 mail from:< > 回车 <>中填写发件人的邮箱,即你自己的邮箱名 输入 rcpt to:< > 回车 <>中填入收件人的邮箱 输入 data 回车 ,回车后就可以开始写邮件内容了 下面是data下的可选项: 输入 from:发件人名称 ,此项可任意填入,将显示在收件箱的‘发件人’一栏 输入 to:收件人名称 ,可任意填入,将显示在收件箱的‘收件人’一栏 输入 subject:信件主题 ,显示在收件箱的‘主题’一栏中 Content-Type: text/plain;charset=\"gb2312\ 此时需空一行,即在一空行直接回车,表示正文部分的开始 空行后输入信件的正文内容。 在正文输入结束时输入一个 . (英文输入法下的句号)回车,表示正文部分的结束。这时将显示邮件成功发送的信息。 关于正文输入汉字的问题, 在该窗口下视无法输入汉字的,可以在写字板中打好汉字后复制粘贴进去,且粘贴时只能使用鼠标右键而不能用快捷键,至少我的不行。

    02
    领券