黑基网 首页 学院 编程开发 查看内容

短信备份与还原工具类

2015-3-31 16:54| 投稿: soft

摘要: [java] view plaincopyprint?package com.flyou.utils;    import java.io....
[java] view plaincopyprint?package com.flyou.utils;    import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  import java.io.FileOutputStream;  import java.io.InputStream;    import org.xmlpull.v1.XmlPullParser;  import org.xmlpull.v1.XmlPullParserException;  import org.xmlpull.v1.XmlSerializer;    import android.R.integer;  import android.app.ProgressDialog;  import android.content.ContentResolver;  import android.content.ContentValues;  import android.content.Context;  import android.database.Cursor;  import android.net.Uri;  import android.os.Environment;  import android.util.Log;  import android.util.Xml;    public class SmsUtils {    private static final String TAG = "SmsUtils";    private static ContentResolver resolver;    private static Uri url;    private static ContentValues values;    private static ProgressDialog dialog;    private static int max;    private static int size;      public interface BackUpCallBack {      /**      * 开始备份的时候,设置进度的最大值      *       * @param max      *          总进度      */      public void beforeBackup(int max);        /**      * 备份过程中,增加进度      *       * @param progress      *          当前进度      */      public void onSmsBackup(int progress);      }      public interface ReStroeCallBack {      /**      * 恢复短信前      *       * @param max      *          最大短信条数      */      public void beforeReStore(int max);        /**      * 恢复短息时      *       * @param position      *          当前进度      */      public void OnReStore(int position);      }      /**    *     * @param context    *          上下文    * @throws Exception    *           把异常抛出给调用处处理    */    public static void buckUpSms(Context context, BackUpCallBack callBack) throws Exception {        resolver = context.getContentResolver();      File file = new File(Environment.getExternalStorageDirectory(), "backUpSms.xml");      FileOutputStream fos = new FileOutputStream(file);      XmlSerializer serializer = Xml.newSerializer();      serializer.setOutput(fos, "utf-8");      serializer.startDocument("utf-8", true);      serializer.startTag(null, "smss");      url = Uri.parse("content://sms/");      Cursor cursor = resolver.query(url, new String[] { "address", "date", "type", "body" }, null, null, null);      // 操作前      callBack.beforeBackup(cursor.getCount());      int postion = 0;        // 遍历cursor 序列化 短信实体      serializer.attribute(null, "size", cursor.getCount() + "");      while (cursor.moveToNext()) {        Thread.sleep(300);        String address = cursor.getString(0);        String date = cursor.getString(1);        String type = cursor.getString(2);        String body = cursor.getString(3);          serializer.startTag(null, "sms");          serializer.startTag(null, "address");        serializer.text(address);        serializer.endTag(null, "address");          serializer.startTag(null, "date");        serializer.text(date);        serializer.endTag(null, "date");          serializer.startTag(null, "type");        serializer.text(type);        serializer.endTag(null, "type");          serializer.startTag(null, "body");        serializer.text(body);        serializer.endTag(null, "body");          serializer.endTag(null, "sms");        // 更新进度条        callBack.onSmsBackup(postion++);      }      cursor.close();      serializer.endTag(null, "smss");      serializer.endDocument();      fos.close();    }      /**    * 短信的还原    */    public static void reStoreSms(Context context, ReStroeCallBack callBack) throws Exception {      resolver = context.getContentResolver();        // 删除原有短信数据      Cursor cursor = resolver.query(url, new String[] { "address", "date", "type", "body" }, null, null, null);      if (cursor.moveToNext()) {        resolver.delete(url, null, null);      }      cursor.close();            // 获取短信备份文件      File file = new File(Environment.getExternalStorageDirectory(), "backUpSms.xml");      InputStream inputStream = new FileInputStream(file);      // 创建解析对象      XmlPullParser parser = Xml.newPullParser();      parser.setInput(inputStream, "utf-8");        int eventType = parser.getEventType();        while (eventType != XmlPullParser.END_DOCUMENT) {        String tagName = parser.getName();        switch (eventType) {          case XmlPullParser.START_TAG:            if ("smss".equals(tagName)) {                max = Integer.parseInt(parser.getAttributeValue(null, "size"));              Log.i(TAG, max + "-----------------------");              // 备份前 设置最大进度条值              callBack.beforeReStore(max);                size = Integer.parseInt(parser.getAttributeValue(null, "size"));            } else if ("sms".equals(tagName)) {              values = new ContentValues();            } else if ("address".equals(tagName)) {              values.put("address", parser.nextText());            } else if ("date".equals(tagName)) {              values.put("date", parser.nextText());              } else if ("type".equals(tagName)) {              values.put("type", parser.nextText());              } else if ("body".equals(tagName)) {              values.put("body", parser.nextText());              }            break;          case XmlPullParser.END_TAG:            // 插入短信数据            if ("sms".equals(tagName)) {              Log.i(TAG, "----------------插入数据---------------");              resolver.insert(url, values);                callBack.OnReStore(size - (max--));              Thread.sleep(300);            }            break;          default:            break;          }        // 获得下一个标签名        eventType = parser.next();      }      }  }  
小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部