ContentResolver系统短信备份
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系统短信备份相关推荐
- android ContentObserver监听系统短信和备份短信到本地
contentProvider中的一个工具,记录一下. 监听短信: package com.example.messagedemo;import android.net.Uri; import and ...
- 再也不怕短信丢失了---短信备份
大家晚上好,这讲给大家分享的是安全有效的demo短信备份.原理是这样的,在系统中找到短信信息数据库,再将数据库里面的信息保存到其他可知的地方,这个地方指的是新建的小应用私有目录里,用到的知识点有内容提 ...
- Android短信备份案例
[1] 通过使用getContentResolver内容解析者实现短信的读取 , 然后将其备份到xml 文件中, [2]通过getContentResolver还可以实现短信的插入 , 联系人的读取等 ...
- 未越狱iphone与 Android短信备份迁移攻略
本攻略的原理简单,对小白们操作麻烦,对自己会越狱的同学,又是鸡肋.为了昨天熬夜到2点的辛苦,还是抽出时间写写. 转载自己搬,无需通知本人. 现在许多软件都能实现通讯录和短信 ...
- android手机短信备份软件,手机短信备份软件-SMS Backup Restore Pro(短信备份) 安卓版v7.13-PC6安卓网...
短信备份还原 SMS Backup Restore:短信备份还是很有必要的,遇到一些重要信息的保存,定时备份比较的方便. 官方介绍 短信备份还原 SMS Backup Restore是Android平 ...
- 爱思助手短信备份到安卓_爱思备份短信 爱思助手备份短信
爱思助手有全部备份跟分类备份~ 可以备份的有 1.iTunesStore和AppStore中的内容(包括所有已安装的APP),或是直接下载到iBooks的PDF(您可以按照"传输iTunes ...
- PHPYUN人才系统短信插件
这段时间php程序的人才招聘系统挺火,公司有很多使用PHPYUN人才系统的客户,遇到短信发送问题.主要问题在于系统自带的短信接口不稳定,造成用户体验变差,直接导致客户流失. 今天我来讲解一下PHPYU ...
- Android:读取系统短信
1.权限: private void initSmsPermissions() {RxPermissions permissions = new RxPermissions(this);permiss ...
- 54高级工具功能之短信备份
短信备份需要操作短信的数据库,使用ContentResolver去查询,我们看下源码中URI的路径: 打开类: 数据库对应的: 在telephony这个包下,mmssms.db的sms表,我们注意四列 ...
最新文章
- R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数
- 限制会话id服务端不共享_会话控制 - able-woman - 博客园
- linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
- oracle 10g安装过程遇到的问题
- MM 收货容差如何设定
- 有序链表转换二叉搜索树Python解法
- wince串口驱动分析(转)
- h5大转盘 php,HTML5 canvas实现中奖转盘的实例代码
- Linux的标准I/O和管道
- 第三次小组实践作业小组每日进度汇报:2017-12-3
- Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解
- sqoop1.99.6 mysql_Alex的Hadoop菜鸟教程:第6课Sqoop2安装教程
- (liunx)全套青龙面板+傻妞流水版2022年8月22日更新
- 【diannaoxitong】word安全模式怎么解除?word安全模式快速解除方法
- (CVPR-2021)动态区域感知卷积
- 什么是make/Makefile?
- ABAP ONF4 事件 查找表
- DAX 第八篇:【翻译】数据沿袭(Data Lineage )
- 多御安全浏览器快捷键汇总
- 小哨兵还原卡密码如何清楚?