短信备份与还原
2016-06-11 16:09
477 查看
1、domain中SmsInfo 数据实体
2、在service中BackupService服务,长期运行,不被回收
3、angine中SmsInfoService 内容提供者
4、Activity中定义
短信还原:
1、Activity中定义
case R.id.tv_atools_restore:
// 读取xml中的信息并解析,解析后就插入到短信应用里面
// 短信还原不能被终止,所以加入对话框
// 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;
“`
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重新赋值 } }
“`
相关文章推荐
- 路由器备份配置
- 备份线路的配置
- 数据库备份 SQLServer的备份和灾难恢复
- 简化SQL Server备份与还原到云工作原理及操作方法
- 使用cgroups来限制MySQL企业备份服务对资源的占用
- sqlserver2005打造自动备份的维护计划图解教程
- MySQL数据备份之mysqldump的使用详解
- 详解MySQL数据备份之mysqldump使用方法
- mysql备份与恢复详解
- 我的文档和QQ聊天记录备份与恢复技巧
- oracle备份恢复的具体方法
- MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程
- 重新安装2003操作系统的注意事项及备份方法
- 基于JavaScript短信验证码如何实现
- 如何备份MySQL数据库
- Oracle自动备份及自动备份步骤
- 一个简单的MySQL备份Shell脚本
- Android接收和发送短信处理
- 用户管理的备份(一致性备份、非一致性备份、脱机备份、联机备份)
- Android开发中实现发送短信的小程序示例