1.布局界面(layout.xml)

添加一个按钮组件,单击按钮以后会读取系统短信并在SD卡下保存一个文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:tools="http://schemas.android.com/tools"tools:context=".MainActivity"android:orientation="vertical"><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="短信备份"/></LinearLayout>

2.编写SmsInfo类

因为获取到的短信较多,需要使用到 list ,而且每条短信包含的内容较多,如信息内容、时间、类型、发送地址,此时就需要一个类来封装这些信息,这样能够减少代码量,使代码更加容易理解。

class SmsInfo {private String address;private long date;private int type;private String body;private int id;public SmsInfo(String address,long date,int type,String body){this.address=address;this.date=date;this.type=type;this.body=body;}public SmsInfo(String address,long date,int type,String body,int id){this.address=address;this.date=date;this.type=type;this.body=body;this.id=id;}public void setAddress(String address){ this.address=address; }public String getAddress(){ return address; }public void setDate(long date){ this.date=date; }public long getDate(){  return date; }public void setBody(String body){ this.body=body; }public String getBody(){ return body;  }public void setId(int id){ this.id=id; }public int getId(){return id; }public void setType(int type){  this.type=type;}public int getType(){return type; }
}

上述就是 SmsInfo JavaBean 对象的具体代码,其中封装了 date 、 type 、 address 、 body 以及 id 属性。

3.创建 XML 文件生成类Sms_Xml . java

该类负责把获取到的信息保存成一个 mes .xml 文件,存放在 SD 卡下。

public class Sms_Xml {public static void beifen_sms(List<SmsInfo>list, Context context){try {XmlSerializer serial = Xml.newSerializer();File file = new File(context.getExternalFilesDir(null), "mes.xml");
//初始化序列号器,指定xml数据写入到那个文件及编码FileOutputStream fi_out = new FileOutputStream(file);serial.setOutput(fi_out, "utf-8");serial.startDocument("utf-8", true);
//根结点serial.startTag(null, "smss");for (SmsInfo info : list) {
//构建父结点serial.startTag(null, "sms");serial.attribute(null, "id", info.getId() + "");
//bodyserial.startTag(null, "body");serial.text(info.getBody());serial.endTag(null, "body");
//adressserial.startTag(null, "address");serial.text(info.getAddress());serial.endTag(null, "address");
//typeserial.startTag(null, "type");serial.text(info.getType() + "");serial.endTag(null, "type");
//dateserial.startTag(null, "date");serial.text(info.getDate() + "");serial.endTag(null, "date");
//父节点结束serial.endTag(null, "sms");}serial.endTag(null, "smss");serial.endDocument();fi_out.close();Toast.makeText(context, "短信备份成功", Toast.LENGTH_SHORT).show();}catch (Exception e){e.printStackTrace();Toast.makeText(context, "短信备份失败", Toast.LENGTH_SHORT).show();}}
}

4.MainActivity代码

负责实现短信备份功能,初始化组件,为其添加事件,负责读取短信内容并储存。

public class MainActivity extends AppCompatActivity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.layout);button=findViewById(R.id.button1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Uri uri=Uri.parse("content://sms/");ContentResolver contentResolver=getContentResolver();Cursor cursor=contentResolver.query(uri,new String[]{"address","date","type","body"},null,null,null);List<SmsInfo>list=new ArrayList<SmsInfo>();while (cursor.moveToNext()){String address=cursor.getString(0);long date=cursor.getLong(1);int type=cursor.getInt(2);String body=cursor.getString(3);SmsInfo smsInfo=new SmsInfo(address,date,type,body);list.add(smsInfo);}cursor.close();Sms_Xml.beifen_sms(list,MainActivity.this);}});}
}

5.添加权限

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

6.结果展示

1)打开虚拟机,创建联系人,并发送短信

2)点击按钮,显示备份成功

3)在SD卡目录下打开mes.xml文件

               

ContentResolver系统短信备份相关推荐

  1. android ContentObserver监听系统短信和备份短信到本地

    contentProvider中的一个工具,记录一下. 监听短信: package com.example.messagedemo;import android.net.Uri; import and ...

  2. 再也不怕短信丢失了---短信备份

    大家晚上好,这讲给大家分享的是安全有效的demo短信备份.原理是这样的,在系统中找到短信信息数据库,再将数据库里面的信息保存到其他可知的地方,这个地方指的是新建的小应用私有目录里,用到的知识点有内容提 ...

  3. Android短信备份案例

    [1] 通过使用getContentResolver内容解析者实现短信的读取 , 然后将其备份到xml 文件中, [2]通过getContentResolver还可以实现短信的插入 , 联系人的读取等 ...

  4. 未越狱iphone与 Android短信备份迁移攻略

    本攻略的原理简单,对小白们操作麻烦,对自己会越狱的同学,又是鸡肋.为了昨天熬夜到2点的辛苦,还是抽出时间写写.        转载自己搬,无需通知本人.        现在许多软件都能实现通讯录和短信 ...

  5. android手机短信备份软件,手机短信备份软件-SMS Backup Restore Pro(短信备份) 安卓版v7.13-PC6安卓网...

    短信备份还原 SMS Backup Restore:短信备份还是很有必要的,遇到一些重要信息的保存,定时备份比较的方便. 官方介绍 短信备份还原 SMS Backup Restore是Android平 ...

  6. 爱思助手短信备份到安卓_爱思备份短信 爱思助手备份短信

    爱思助手有全部备份跟分类备份~ 可以备份的有 1.iTunesStore和AppStore中的内容(包括所有已安装的APP),或是直接下载到iBooks的PDF(您可以按照"传输iTunes ...

  7. PHPYUN人才系统短信插件

    这段时间php程序的人才招聘系统挺火,公司有很多使用PHPYUN人才系统的客户,遇到短信发送问题.主要问题在于系统自带的短信接口不稳定,造成用户体验变差,直接导致客户流失. 今天我来讲解一下PHPYU ...

  8. Android:读取系统短信

    1.权限: private void initSmsPermissions() {RxPermissions permissions = new RxPermissions(this);permiss ...

  9. 54高级工具功能之短信备份

    短信备份需要操作短信的数据库,使用ContentResolver去查询,我们看下源码中URI的路径: 打开类: 数据库对应的: 在telephony这个包下,mmssms.db的sms表,我们注意四列 ...

最新文章

  1. R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数
  2. 限制会话id服务端不共享_会话控制 - able-woman - 博客园
  3. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
  4. oracle 10g安装过程遇到的问题
  5. MM 收货容差如何设定
  6. 有序链表转换二叉搜索树Python解法
  7. wince串口驱动分析(转)
  8. h5大转盘 php,HTML5 canvas实现中奖转盘的实例代码
  9. Linux的标准I/O和管道
  10. 第三次小组实践作业小组每日进度汇报:2017-12-3
  11. Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解
  12. sqoop1.99.6 mysql_Alex的Hadoop菜鸟教程:第6课Sqoop2安装教程
  13. (liunx)全套青龙面板+傻妞流水版2022年8月22日更新
  14. 【diannaoxitong】word安全模式怎么解除?word安全模式快速解除方法
  15. (CVPR-2021)动态区域感知卷积
  16. 什么是make/Makefile?
  17. ABAP ONF4 事件 查找表
  18. DAX 第八篇:【翻译】数据沿袭(Data Lineage )
  19. 多御安全浏览器快捷键汇总
  20. 小哨兵还原卡密码如何清楚?

热门文章

  1. yandex浏览器_使用CSS升级文本编辑器:Yandex的实践
  2. MySQL替换回车符\n
  3. 使用cmd命令更改浏览器代理
  4. html跨域传值,iframe跨域传值踩坑
  5. android模仿唱吧榜单界面,仿唱吧UI效果
  6. 三子棋-支持N子棋-详解(以及堵截玩家的方法设计)
  7. 安卓USB通信之权限管理
  8. 淘宝仓库宝贝如何一键上架到店铺?
  9. vue js 对象转数组
  10. 简介:argparse