4.1短信备份,利用系统短信内容提供者ContentResolver

  1. 查出所有的短信,解析内容提供者的Uri
  2. 获得内容提供者的访问对象
  3. 获得游标Cursor结果查询集
  4. 定义一个实体类SmsInfo,存放短信信息时间等
  5. 把游标结果集的内容存放到实体类中
  6. 利用XmlSerializer序列化到本地
    存放的位置在sd卡:
    /mnt/sdcard/sms.xml
/**
     * 备份短信
     * @param v
     */
    public void backupSms(View v) {
        // 1. 查出所有的短信,解析内容提供者的Uri
        Uri uri = Uri.parse("content://sms/");
        //获得内容提供者的访问对象
        ContentResolver resolver = getContentResolver();
        //String[]为要显示的列表
        Cursor cursor = resolver.query(uri, new String[]{"_id", "address", "date", "type", "body"}, null, null, null);

        if(cursor != null && cursor.getCount() > 0) {
            List<SmsInfo> smsList = new ArrayList<SmsInfo>();
            SmsInfo sms;
            while(cursor.moveToNext()) {    // 控制游标结果集的指针向下移一位, 当到最后一位, 停止.返回false
                sms = new SmsInfo();
                sms.setId(cursor.getInt(0));    // 设置短信的id
                sms.setAddress(cursor.getString(1));    // 设置短信的号码
                sms.setDate(cursor.getLong(2)); // 设置短信的日期
                sms.setType(cursor.getInt(3));  // 设置短信的类型, 接收1还是发送2
                sms.setBody(cursor.getString(4)); // 设置短信的内容
                smsList.add(sms);
            }
            cursor.close();
            // 2. 序列化到本地
            writeToLocal(smsList);
        }
    }

    /**
     * 序列化到本地
     */
    private void writeToLocal(List<SmsInfo> smsList) {
        try {
            XmlSerializer serializer = Xml.newSerializer(); // 得到序列化对象
            // 指定输出位置
            FileOutputStream fos = new FileOutputStream("/mnt/sdcard/sms.xml");
//          设置序列化对象输出的编码
            serializer.setOutput(fos, "utf-8");
            serializer.startDocument("utf-8", true);
            serializer.startTag(null, "smss");
            for (SmsInfo smsInfo : smsList) {
                serializer.startTag(null, "sms");
                serializer.attribute(null, "id", String.valueOf(smsInfo.getId()));
                // 写号码
                serializer.startTag(null, "address");
                serializer.text(smsInfo.getAddress());
                serializer.endTag(null, "address");
                // 写时间
                serializer.startTag(null, "date");
                serializer.text(String.valueOf(smsInfo.getDate()));
                serializer.endTag(null, "date");

                //写类型
                serializer.startTag(null, "type");
                serializer.text(String.valueOf(smsInfo.getType()));
                serializer.endTag(null, "type");

                // 写内容
                serializer.startTag(null, "body");
                serializer.text(smsInfo.getBody());
                serializer.endTag(null, "body");

                serializer.endTag(null, "sms");
            }

            serializer.endTag(null, "smss");

            serializer.endDocument();

            Toast.makeText(this, "备份成功", 0).show();
        } catch (Exception e) {
            Toast.makeText(this, "备份失败", 0).show();
            e.printStackTrace();
        }

    }

SmsInfo实体类:

public class SmsInfo {

    private int id;
    private String address;
    private long date;
    private int type;
    private String body;
    public SmsInfo(int id, String address, long date, int type, String body) {
        super();
        this.id = id;
        this.address = address;
        this.date = date;
        this.type = type;
        this.body = body;
    }
    @Override
    public String toString() {
        return "SmsInfo [id=" + id + ", address=" + address + ", date=" + date
                + ", type=" + type + ", body=" + body + "]";
    }
    public SmsInfo() {
        super();
        // TODO Auto-generated constructor stub
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public long getDate() {
        return date;
    }
    public void setDate(long date) {
        this.date = date;
    }
    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
}

权限申明:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值