XmlSerializer 短信备份

来源:互联网 发布:淘宝冰点营销怎么使用 编辑:程序博客网 时间:2024/06/07 00:09
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;    }}
0 0