大家晚上好,这讲给大家分享的是安全有效的demo短信备份。原理是这样的,在系统中找到短信信息数据库,再将数据库里面的信息保存到其他可知的地方,这个地方指的是新建的小应用私有目录里,用到的知识点有内容提供者的使用,保存文件,如何以xml文件形式保存。恩,不多说,立马开讲。
还是先跟大家介绍一下布局文件,我写的布局文件就是一个button按钮,当点击按钮时,短信备份成功,最后以友好提示框提示。
MainActivity.java
// 进入短信备份
public void blackupSms(View v) {
//友好提示框
ToastUtil.show(context,"备份成功");
try{
//创建一个写入流,默认保存路径是data/data/包名/files,参数一:文件名,xml形式,参数二:保存的形式,私有
FileOutputStream fos=openFileOutput("message.xml",MODE_PRIVATE);
//调用业务层方法,参数是:上下文,输出流
SmsEngine.BlackMessage(context,fos);
} catch (Exception e) {
e.printStackTrace();
}
}
SmsEngine.java
/**
*短信备份业务层
*/
public class SmsEngine {
public static void BlackMessage(Context context,FileOutputStream fos) throws Exception{
//创建内容提供者对象,更新数据
ContentResolver contentResolver = context.getContentResolver();
//访问短信系统数据库uri
String uri="content://sms";
//创建序列器
XmlSerializer serializer=Xml.newSerializer();
//以输出流保存xml文件,保存的格式
serializer.setOutput(fos,"utf-8");
serializer.startDocument("utf-8",true);//开始写入文档
serializer.startTag(null,"smss");//开始写入标签
//利用访问者查询短信系统数据库,参数一:解析后的uri,参数二:查询的字段,返回的是游标
Cursor cursor = contentResolver.query(Uri.parse(uri),new String[]{"address","date","type","body"},null,null);
//遍历游标
while(cursor.moveToNext()){
//获取各字段的值
String address = cursor.getString(0);
String date = cursor.getString(1);
String type = cursor.getString(2);
String body = cursor.getString(3);
serializer.startTag(null,"sms");//sms标签
serializer.startTag(null,"address");//address开始标签
serializer.text(address);//写入xml文本
serializer.endTag(null,"address");//adress结束标签
serializer.startTag(null,"date");//date标签
serializer.text(date);
serializer.endTag(null,"date");
serializer.startTag(null,"type");//type标签
serializer.text(type);
serializer.endTag(null,"type");
serializer.startTag(null,"body");//body标签
serializer.text(body);
serializer.endTag(null,"body");
serializer.endTag(null,"sms");//sms结束标签
}
serializer.endTag(null,"smss");//smss结束便签
serializer.endDocument();//结束文档
fos.close();//关闭流,游标
cursor.close();
}
代码就怎么多,就能实现数据的转移,短信的备份,只要在你创建的应用data/data/包名/files目录下,可以找到以xml保存的短信。晚安,希望你们有个愉快的夜晚。