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;    }}

更多相关文章

  1. Android数据库SQLite基础
  2. Android(安卓)Wifi IP 设置
  3. Android(安卓)SMS 短信读取
  4. Android(安卓)JNI 之 .h 头文件
  5. ItemDecoration解析(一) getItemOffsets
  6. Android(安卓)开发定位Demo
  7. Android通知频道,通知点
  8. 淘宝客商品查询接口
  9. android 圆形头像的Imageview

随机推荐

  1. 在php视图文件中使用element ui
  2. 配置 conda 镜像环境
  3. 总结几种常见的/需要注意到的云服务器安
  4. 关于HTTP首部的知识综合
  5. 浅谈Bootstrap的网格布局系统
  6. C语言/C++基础语句编程风格
  7. C#到底有没有指针
  8. 男生鼻子怎么画?动漫人物鼻子的画法
  9. vue使用axios报404错误:Uncaught (in prom
  10. 我采访了一位 Pornhub 工程师,聊了这些纯