因为短信的内容已经通过ContentProvider暴露出来,所以我们可以直接用内容解析者获取短信内容。

想要获取短信内容,你需要知道的一些东西:

1、Uri uri = Uri.parse("content://sms/");

2、Cursor cursor = getContentResolver().query(uri,new String[]{"address","date","body"},null,null,null);

知道了这个就好获取短信的相关信息了

先看代码吧:

 public void onClick(View v) {
         XmlSerializer serializer = Xml.newSerializer();
         File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
         try {
             FileOutputStream outputStream =   new FileOutputStream(file);
             serializer.setOutput(outputStream, "utf-8");
             serializer.startDocument("utf-8",true);
             serializer.startTag(null,"smss");

             Uri uri = Uri.parse("content://sms/");
             Cursor cursor = getContentResolver().query(uri,new String[]{"address","date","body"},null,null,null);
             if (cursor!=null){
             while (cursor.moveToNext()){
                 String address = cursor.getString(0);
                 String date = cursor.getString(1);
                 String body = cursor.getString(2);

                 try {
                     //sms节点
                     serializer.startTag(null,"sms");
                     //address节点
                     serializer.startTag(null,"address");
                     serializer.text(address);
                     serializer.endTag(null,"address");
                     //date节点
                     serializer.startTag(null,"date");
                     serializer.text(date);
                     serializer.endTag(null,"date");
                     //body节点
                     serializer.startTag(null,"body");
                     serializer.text(body);
                     serializer.endTag(null,"body");

                     serializer.endTag(null,"sms");

                 } catch (IOException e) {
                     e.printStackTrace();
                 }
                 System.out.println(address+"---"+date+"---"+body);
             }
         }
             serializer.endTag(null,"smss");
             serializer.endDocument();
             outputStream.close();
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         }

     }

主要用内容解析者获取短信的信息和内容,然后用XmlSerializer存储。

下面是Manifest.xml:需要加上这三个权限

     <uses-permission android:name="android.permission.READ_SMS"/>
     <uses-permission android:name="android.permission.WRITE_SMS"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

ContentProvider备份短信,以xml文件存储的更多相关文章

  1. android 数据存储&lt;一&gt;----android短信发送器之文件的读写(手机+SD卡)

    本文实践知识点有有三: 1.布局文件,android布局有相对布局.线性布局,绝对布局.表格布局.标签布局等,各个布局能够嵌套的. 本文的布局文件就是线性布局的嵌套 <LinearLayout ...

  2. android 数据存储----android短信发送器之文件的读写(手机+SD卡)

    本文实践知识点有有三: 1.布局文件,android布局有相对布局,线性布局,绝对布局,表格布局,标签布局等.各个布局能够嵌套的.本文的布局文件就是线性布局的嵌套 <LinearLayout x ...

  3. Android发展_备份短信

     短信备份的原理 短信备份的原理.是用内容提供者读取短信,然后保存. public class SmsBackupUtils { // 回调接口 public interface SmsBacku ...

  4. 02 . 02 . Go之Gin+Vue开发一个线上外卖应用(集成第三方发送短信和xorm生成存储数据库表)

    集成第三方发送短信 介绍 用户登录 用户登录有两种方式: 短信登录,密码登录 短信登录是使用手机号和验证码进行登录 短信平台 很多云平台,比如阿里云,腾讯云,七牛云等云厂商,向程序开发者提供了短信验证 ...

  5. WinForm中使用XML文件存储用户配置及操作本地Config配置文件

    大家都开发winform程序时候会大量用到配置App.config作为保持用户设置的基本信息,比如记住用户名,这样的弊端就是每个人一些个性化的设置每次更新程序的时候会被覆盖. 故将配置文件分两大类: ...

  6. WinForm中使用XML文件存储用户配置及操作本地Config配置文件(zt)

    因项目中采用CS结构读取Web.config文件,故参照一下的连接完成此功能,在此感谢原作者! 原文地址: http://www.cnblogs.com/zfanlong1314/p/3623622. ...

  7. 阿里大于短信返回XML

    返回异常和成功的两种不同,XML返回直接拿alibaba_aliqin_fc_sms_num_send_response判断节点是否有这个名字 官方API地址: https://api.alidayu ...

  8. Android短信备份及插入笔记

    实现备份短信到xml文件和像短信中插入一条数据 一.实现短信将备份到xml文件中 在布局文件中定义一个按钮,定义点击事件为copyClick MainActivity.java: package co ...

  9. Android简易实战教程--第八话《短信备份~一》

    各种手机助手里面都包含了短信备份这一项.短信的本分主要包含四项:内容body.事件date.方式type.号码address. 短信备份~一.使用一种很笨的方式来保存短信到xml文件中,而且保存在外部 ...

随机推荐

  1. 企业邮箱在Android(安卓)系统手机上POP3/IMAP协议的设置方法

    此处以三星(系统版本4.4.2)为例,介绍下使用安卓系统自带的客户端如何设置pop/imap协议方式方法 以下我们将使用test@zhuyuming.so 为测试案例,请您操作时更换成您自己的邮箱账号 ...

  2. 关于SUID、SGID、Sticky

    SUID属性 passwd命令可以用于更改用户的密码,一般用户可以使用这个命令修改自己的密码.但是保存用户密码的/etc/shadow文件的权限是400,也就是说只有文件的所有者root用户可以写入, ...

  3. Mac os下换行符导致发布到npm里的命令行模块不能使用问题

    学习node,弄一个命令行模块,发布到npm后,Windows安装后可以使用,但Mac 终端下则不行.对比grunt-cli搞了一夜,甚是郁闷,最后发现竟然是操作系统的换行符问题. npm insta ...

  4. Spring AOP 开发中遇到问题:Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.xxx.collector.service.impl.XxxServiceImpl [Xlint:invalidAbsoluteTypeName]

    在网上找了很多,都不是我想要的,后来发现是我在springaop注解的时候 写错了类名导致的这个问题 @Pointcut("execution(* com.xxx.collector.ser ...

  5. WcfDataService with EntityFramework 6 的若干问题

    1.Microsoft.Data.Edm等NuGet包需要升级到5.6版本 2.SVC不要使用DataService基类 class WcfDataService1 : DataService< ...

  6. input文本框和img验证码对齐问题

    左边放input,右边img验证码,然后一直不能对齐,如图: img老是比input高出一个头,然后调的头都大了还是不行,照例百度之, 给input和img都加一个 vertical-align:mi ...

  7. 利用注解进行sql反射代码示例

    @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String val ...

  8. Java面向对象编程 第二章 第一个Java应用

    2.1创建Java源文件 Java应用由一个或多个扩展名为".java"的文件构成,这些文件被称为Java源文件,从编译的角度,则被称为编译单元. 本章包含两个Java源文件:Do ...

  9. 线程实现方式以及序列化 反序列化.java

    一.序列化与反序列化       把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上, ...

  10. AC日记——元素查找 codevs 1230

    1230 元素查找  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给出n个正整数,然后有 ...