XmlSerializer 短信备份
16lz
2021-01-26
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; }}
更多相关文章
- Android数据库SQLite基础
- Android(安卓)Wifi IP 设置
- Android(安卓)SMS 短信读取
- Android(安卓)JNI 之 .h 头文件
- ItemDecoration解析(一) getItemOffsets
- Android(安卓)开发定位Demo
- Android通知频道,通知点
- 淘宝客商品查询接口
- android 圆形头像的Imageview