• XmlSerializer 短信备份


    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;
        }
    
    }
    
  • 相关阅读:
    find命令
    shell编程基础
    grep命令
    awk命令
    结对项目之需求分析与原型模型设计
    使用Git进行代码管理的心得
    软件工程的实践项目的自我目标
    第五次作业——团队项目——需求规格说明书
    调研android开发环境的发展演变
    结对编程总结
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/6647938.html
Copyright © 2020-2023  润新知