标签:
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(); } } }
标签:
原文地址:http://blog.csdn.net/u013616976/article/details/44775443