/*
* 定义短信还原的接口
*/
public interface RestoreSmsCallback{
public void beforeSmsRestore(int size);
public void onSmsRestore(int process);
}
/*
* 短信的还原
*/
public static boolean restoreSms(Context context, RestoreSmsCallback callback) throws XmlPullParserException, IOException{
String path;
int process = 0;//获取进度条的开始点
//判断备份短信是否存在,读取SD卡的文件
if(Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED)){
//获取文件的路径
File file = new File(Environment.getExternalStorageDirectory(), "backup.xml");
//获取Pull解析器
XmlPullParser pullParser = Xml.newPullParser();
FileInputStream fis = new FileInputStream(file);
//初始化pull解析器
pullParser.setInput(fis, "utf-8");
//设置事件的标签节点
int eventType = pullParser.getEventType();
//获取内容提供者
ContentResolver resolver = context.getContentResolver();
ContentValues values = new ContentValues();
while(eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType) {
case XmlPullParser.START_DOCUMENT://判断当前的事件是否是文档的开始
if(pullParser.getName().equals("smss")){
//调用接口的方法,获取属性的多少
String size = pullParser.getAttributeValue(0);
callback.beforeSmsRestore(Integer.valueOf(size));
}
break;
case XmlPullParser.START_TAG://开始的标签
if(pullParser.getName().equals("sms")){//判断起点标签
if(pullParser.getName().equals("address")){
values.put("address",pullParser.nextText());
resolver.insert(Uri.parse("content://sms/"), values);
}else if(pullParser.getName().equals("date")){
values.put("date",pullParser.nextText());
resolver.insert(Uri.parse("content://sms/"), values);
}else if(pullParser.getName().equals("date")){
values.put("type",pullParser.nextText());
resolver.insert(Uri.parse("content://sms/"), values);
}else if(pullParser.getName().equals("body")){
String decryptText;
try {
//这是解密短信的部分
decryptText = Crypto.decrypt("456", pullParser.nextText());
values.put("body",decryptText);
} catch (Exception e) {
e.printStackTrace();
values.put("body","短信错误");
}
resolver.insert(Uri.parse("content://sms/"), values);
}
}
break;
case XmlPullParser.END_TAG://结束的标签
if(pullParser.getName().equals("sms")){
//还原每条短信
process++;
callback.onSmsRestore(process);
}
}
eventType = pullParser.next();
}
return true;
}else{
throw new XmlPullParserException("xmlpull解析异常");
}
}