您的位置:首页 > 其它

短信备份与还原

2016-06-11 16:09 477 查看
1、domain中SmsInfo 数据实体

public class SmsInfo {
private String address;
private String date;
private int type;//1代表接收,2,代表发送
private String body;
private String _id;
public SmsInfo() {

}
public SmsInfo(String _id, String address, String date, int type, String body) {
this.address = address;
this.date = date;
this._id = _id;
this.type = type;
this.body = body;
}
public String getId() {
return _id;
}
public void setId(String id) {
this._id = _id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}

}


2、在service中BackupService服务,长期运行,不被回收

public class BackupSmsService extends Service {
private SmsInfoService smsInfoService;
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {

smsInfoService=new SmsInfoService(this);
super.onCreate();
new Thread(){
public void run() {
try {
List<SmsInfo> smsinfos=smsInfoService.getSmsInfos();//拿到集合后,把集合里面的内容写到文件里面
File file=new File("/sdcard/smsbackup.xml");
XmlSerializer serializer=Xml.newSerializer();
FileOutputStream fos=new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "smss");

serializer.startTag(null, "count");
serializer.text(smsinfos.size()+"");
serializer.endTag(null, "count");

for(SmsInfo info:smsinfos){
serializer.startTag(null,"sms");

serializer.startTag(null,"_id");
//两个节点的数据
serializer.text(info.getId());
serializer.endTag(null,"_id");

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,"sms");
}

serializer.endTag(null,"smss");
serializer.endDocument();
fos.flush();
fos.close();
//                  子线程显示toast的标准写法
Looper.prepare();
Toast.makeText(getApplicationContext(), "备份成功", 1).show();
Looper.loop();
} catch (Exception e) {
e.printStackTrace();
Looper.prepare();
Toast.makeText(getApplicationContext(), "备份失败", 1).show();
Looper.loop();
}
};

}.start();
}

}


3、angine中SmsInfoService 内容提供者

public class SmsInfoService {
private Context context;
private int currentcount = 0;
private static final String TAG = "SmsInfoService";

public SmsInfoService(Context context) {
this.context = context;
}

public List<SmsInfo> getSmsInfos() {
List<SmsInfo> smsInfos = new ArrayList<SmsInfo>();
ContentResolver resolver = context.getContentResolver();
Uri uri = Uri.parse("content://sms/");// 整个sms表
Cursor cursor = resolver.query(uri, new String[] { "_id", "address",
"date", "type","body" }, null, null, "date desc");
SmsInfo smsinfo;
if (cursor != null) {
Log.i(TAG, "查询到sms数据库中数据条目" + cursor.getCount());
while (cursor.moveToNext()) {
String _id = cursor.getString(0);
String address = cursor.getString(1);
String date = cursor.getString(2);
int type = cursor.getInt(3);
String body = cursor.getString(4);

smsinfo = new SmsInfo( _id, address, date,type, body);
smsInfos.add(smsinfo);
smsinfo = null;
}
cursor.close();
}
return smsInfos;

}
}


4、Activity中定义

case R.id.tv_atools_backup:
Intent service=new Intent(this,BackupSmsService.class);
startService(service);
break;


短信还原:

1、Activity中定义

case R.id.tv_atools_restore:

// 读取xml中的信息并解析,解析后就插入到短信应用里面

// 短信还原不能被终止,所以加入对话框

final ProgressDialog pd=new ProgressDialog(this);
pd.setCancelable(false);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("正在还原短信");
pd.show();
mSmsInfoService=new SmsInfoService(this);
new Thread(){public void run() {
try {
mSmsInfoService.restoreSms("/sdcard/smsbackup.xml",pd);
pd.dismiss();


// Looper.prepare();

// Toast.makeText(getApplicationContext(), “还原成功”, 1).show();

// Looper.loop();

msg=new Message();

msg.what=RESTORE_ERROR;

handler.sendMessage(msg);

} catch (Exception e) {

e.printStackTrace();

pd.dismiss();

Looper.prepare();

Toast.makeText(getApplicationContext(), “还原失败”, 1).show();

Looper.loop();

}

};}.start();

break;

2、angine中SmsInfoService


// 还原短信信息,path短信备份文件对应的路径
public void restoreSms(String path, ProgressDialog pd) throws Exception {
File file = new File(path);
ContentValues values = null;
XmlPullParser parser = Xml.newPullParser();// 使用pullparser解析xml文件
FileInputStream fis = new FileInputStream(file);
parser.setInput(fis, "utf-8");
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {// 如果没有到文件的结尾 则一直执行
switch (type) {
case XmlPullParser.START_TAG:
if ("count".equals(parser.getName())) {// 如果找到count就获取出来
String count = parser.nextText();
pd.setMax(Integer.parseInt(count));

}
if ("sms".equals(parser.getName())) {
values = new ContentValues();
} else if ("address".equals(parser.getName())) {
values.put("address", parser.nextText());
} else if ("date".equals(parser.getName())) {
values.put("date", parser.nextText());
} else if ("type".equals(parser.getName())) {
values.put("type", parser.nextText());
} else if ("body".equals(parser.getName())) {
values.put("body", parser.nextText());
}
break;

case XmlPullParser.END_TAG:
if ("sms".equals(parser.getName())) {
ContentResolver resolver = context.getContentResolver();
Uri url = Uri.parse("content://sms/");
resolver.insert(url, values);
values = null;

currentcount++;
pd.setProgress(currentcount);// 设置进度
}
break;
}
type = parser.next();// 不要忘了给type重新赋值

}
}


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  短信 备份