您的位置:首页 > 移动开发 > Android开发

android短信备份与还原

2014-04-07 19:35 148 查看
获取手机内短信内容

public List<SmsInfo> getSmsInfosFromPhone(){
List<SmsInfo> infos=new ArrayList<SmsInfo>();
Uri uri=Uri.parse("content://sms");

Cursor c=context.getContentResolver().query(uri,
new String[]{"address","date","type","body"}, null, null, null);
while(c.moveToNext()){
String address=c.getString(c.getColumnIndex("address"));
String date=c.getString(c.getColumnIndex("date"));
String type=c.getString(c.getColumnIndex("type"));
String body=c.getString(c.getColumnIndex("body"));

SmsInfo info=new SmsInfo(address, date, type, body);
infos.add(info);
}
c.close();
return infos;
}


把短信内容写入到xml文件中

public void backupSms(List<SmsInfo> smss) throws Exception{
XmlSerializer serializer=Xml.newSerializer();
File file=new File(Environment.getExternalStorageDirectory()+"/HuiGui/backup","smsbackup.xml");
if(!file.exists()){
file.createNewFile();
}

OutputStream os=new FileOutputStream(file);
serializer.setOutput(os, "UTF-8");

serializer.startDocument("UTF-8", true);
serializer.startTag(null, "smsinfos");

for(SmsInfo info:smss){
serializer.startTag(null, "smsinfo");

serializer.startTag(null, "address");
serializer.text(info.getAddress());
serializer.endTag(null, "address");

serializer.startTag(null, "date");
serializer.text(info.getDate());
serializer.endTag(null, "date");

serializer.startTag(null, "type");
serializer.text(info.getType());
serializer.endTag(null, "type");

serializer.startTag(null, "body");
serializer.text(info.getBody());
serializer.endTag(null, "body");

serializer.endTag(null, "smsinfo");
}
serializer.endTag(null, "smsinfos");
serializer.endDocument();
os.close();
}

从文件还原短信

public List<SmsInfo> getSmsInfosFromSD() throws Exception{
List<SmsInfo> infos=null;
SmsInfo smsinfo=null;
XmlPullParser parser=Xml.newPullParser();
File file=new File(Environment.getExternalStorageDirectory()+"/HuiGui/backup","smsbackup.xml");
InputStream fis=new FileInputStream(file);
parser.setInput(fis, "UTF-8");
int eventType=parser.getEventType();
while(eventType!=XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_TAG:
if("smsinfos".equals(parser.getName())){
infos=new ArrayList<SmsInfo>();
}else if("smsinfo".equals(parser.getName())){
smsinfo=new SmsInfo();
}else if("address".equals(parser.getName())){
String address=parser.nextText();
smsinfo.setAddress(address);
}else if("date".equals(parser.getName())){
String date=parser.nextText();
smsinfo.setDate(date);
}else if("type".equals(parser.getName())){
String type=parser.nextText();
smsinfo.setType(type);
}else if("body".equals(parser.getName())){
String body=parser.nextText();
smsinfo.setBody(body);
}

break;
case XmlPullParser.END_TAG:
if("smsinfo".equals(parser.getName())){
infos.add(smsinfo);
smsinfo=null;
}
break;
}
eventType=parser.next();
}

return infos;
}


还原短信

private void restoreSms(){
new Thread(){
public void run() {
try {
Uri uri=Uri.parse("content://sms");
getContentResolver().delete(uri, null, null);

mpd.setTitle("正在还原短信...");
List<SmsInfo> smss=smsOperation.getSmsInfosFromSD();
mpd.setMax(smss.size());
for(SmsInfo sms:smss){
ContentValues values=new ContentValues();
values.put("address", sms.getAddress());
values.put("date", sms.getDate());
values.put("type", sms.getType());
values.put("body", sms.getBody());
getContentResolver().insert(uri, values);
SystemClock.sleep(2000);
mpd.incrementProgressBy(1);
}
mpd.dismiss();
Looper.prepare();
Toast.makeText(getApplicationContext(), "短信还原成功!", Toast.LENGTH_SHORT).show();
Looper.loop();

} catch (Exception e) {
e.printStackTrace();
mpd.dismiss();
Looper.prepare();
Toast.makeText(getApplicationContext(), "短信还原未成功。。。", Toast.LENGTH_SHORT).show();
Looper.loop();
}

};
}.start();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: