XmlSerializer 短信备份
2016-03-05 16:12
281 查看
package com.itheima.mobileguard.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import org.xmlpull.v1.XmlSerializer; import android.R.integer; import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Environment; import android.os.SystemClock; import android.util.Xml; import android.widget.ProgressBar; /** * ============================================================ * * * 创建日期 : 2015-3-3 上午9:15:03 * * 描 述 : * * 短信备份的工具类 修订历史 : * * ============================================================ **/ public class SmsUtils { /** * 备份短信的接口 * @author Administrator * */ public interface BackUpCallBackSms{ public void befor(int count); public void onBackUpSms(int process); } public static boolean backUp(Context context, BackUpCallBackSms callback) { /** * 目的 : 备份短信: * * 1 判断当前用户的手机上面是否有sd卡 * 2 权限 --- * 使用内容观察者 * 3 写短信(写到sd卡) * * */ // 判断当前sd卡的状态 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 如果能进来就说明用户有SD卡 ContentResolver resolver = context.getContentResolver(); // 获取短信的路径 Uri uri = Uri.parse("content://sms/"); // type = 1 接收短信 // type = 2 发送短信 // cursor 表示游标的意思 Cursor cursor = resolver.query(uri, new String[] { "address", "date", "type", "body" }, null, null, null); //获取当前一共有多少条短信 int count = cursor.getCount(); //设置pd的最大值 // pd.setMax(count); // progressBar1.setMax(count); callback.befor(count); //进度条默认是0 int process = 0; // 写文件 try { // 把短信备份到sd卡 第二个参数表示名字 File file = new File(Environment.getExternalStorageDirectory(), "backup.xml"); FileOutputStream os = new FileOutputStream(file); // 得到序列化器 // 在android系统里面所有有关xml的解析都是pull解析 XmlSerializer serializer = Xml.newSerializer(); // 把短信序列化到sd卡然后设置编码格式 serializer.setOutput(os, "utf-8"); // standalone表示当前的xml是否是独立文件 ture表示文件独立。yes serializer.startDocument("utf-8", true); // 设置开始的节点 第一个参数是命名空间。第二个参数是节点的名字 serializer.startTag(null, "smss"); //设置smss节点上面的属性值 第二个参数是名字。第三个参数是值 serializer.attribute(null, "size", String.valueOf(count)); // 游标往下面进行移动 while (cursor.moveToNext()) { System.err.println("----------------------------"); System.out.println("address = " + cursor.getString(0)); System.out.println("date = " + cursor.getString(1)); System.out.println("type = " + cursor.getString(2)); System.out.println("body = " + cursor.getString(3)); serializer.startTag(null, "sms"); serializer.startTag(null, "address"); // 设置文本的内容 serializer.text(cursor.getString(0)); serializer.endTag(null, "address"); serializer.startTag(null, "date"); serializer.text(cursor.getString(1)); serializer.endTag(null, "date"); serializer.startTag(null, "type"); serializer.text(cursor.getString(2)); serializer.endTag(null, "type"); serializer.startTag(null, "body"); //读取短信的内容 /** * 加密:第一个参数表示加密种子(密钥) * 第二个参数表示加密的内容 */ serializer.text(Crypto.encrypt("123", cursor.getString(3))); serializer.endTag(null, "body"); serializer.endTag(null, "sms"); //序列化完一条短信之后就需要++ process++; // pd.setProgress(process); // // progressBar1.setProgress(process); callback.onBackUpSms(process); SystemClock.sleep(200); } cursor.close(); serializer.endTag(null, "smss"); serializer.endDocument(); os.flush(); os.close(); return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } }
相关文章推荐
- ListView列表拖拽排序
- nginx与ios实现https双向认证
- 在Linux下查看系统版本信息命令总结
- android开发系列之git常用命令
- Webpack笔记
- 【翻译】Ext JS最新技巧――2016-3-4
- 分治算法-最大子数组问题
- 计算一个集合的子集
- 中继器
- [leetcode 12] Integer to Roman
- EBS-PAC成本更新事务处理
- [转载]NSString中判断中文,英文,数字
- lamp搭建discuz缺少依赖 mysqli_connect()
- 关于JavaBean
- 着弹点
- Pentaho从零单排之一(简介与安装)
- 20135316王剑桥Linux内核学习笔记
- hdu1455 dfs+剪枝
- c++ 广义表
- codeforces 631c