短信的实体bean
package com.examp.backsms.domain;
public class SmsInfo {
private String address;
private String date;
private String type;
private String body;
public SmsInfo() {
}
public SmsInfo(String address, String date, String type, String body) {
this.address = address;
this.date = date;
this.type = type;
this.body = body;
}
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 String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
@Override
public String toString() {
return "SmsInfo [address=" + address + ", date=" + date + ", type="
+ type + ", body=" + body + "]";
}
}
package com.examp.backsms;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import com.examp.backsms.domain.SmsInfo;
import com.examp.backsms.util.SmsUtils;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void backSms(View view) {
// 创建被叫主机名
Uri uri = Uri.parse("content://sms/");
// 获取内容解析器
ContentResolver resolver = getContentResolver();
// 执行查询,得到结果集
Cursor cursor = resolver.query(uri, new String[] { "address", "date",
"type", "body" }, null, null, null);
//创建短信的集合
List<SmsInfo> infos = new ArrayList<SmsInfo>();
//逐一添加到集合
while (cursor.moveToNext()) {
SmsInfo info = new SmsInfo();
info.setAddress(cursor.getString(cursor.getColumnIndex("address")));
info.setBody(cursor.getString(cursor.getColumnIndex("body")));
info.setDate(cursor.getString(cursor.getColumnIndex("date")));
info.setType(cursor.getString(cursor.getColumnIndex("type")));
infos.add(info);
}
//通过工具类调用备份的业务
//将集合|本活动的上下文传入
SmsUtils.backupSms(infos, this);
cursor.close();
}
}
工具类
package com.examp.backsms.util;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import org.xmlpull.v1.XmlSerializer;
import android.content.Context;
import android.os.Environment;
import android.util.Xml;
import android.widget.Toast;
import com.examp.backsms.domain.SmsInfo;
public class SmsUtils {
public static void backupSms(List<SmsInfo> smsInfos, Context context) {
try {
// 创建XML序列化器
XmlSerializer serializer = Xml.newSerializer();
File file = new File(Environment.getExternalStorageDirectory(),
"backupSms.xml");
FileOutputStream os = new FileOutputStream(file);
// 初始化xml序列化器,指定xml数据写入到那个文件,并且制定文件的编码方式
serializer.setOutput(os, "utf-8");
// 设置<?xml version="1.0" encoding="utf-8"?>,及是否是独立的xml文件
serializer.startDocument("utf-8", true);
// 相当于<smss>
serializer.startTag(null, "smss");
for (SmsInfo info : smsInfos) {
serializer.startTag(null, "sms");
serializer.startTag(null, "body");
serializer.text(info.getBody());
serializer.endTag(null, "body");
serializer.startTag(null, "type");
serializer.text(info.getType() + "");
serializer.endTag(null, "type");
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.endTag(null, "sms");
}
serializer.endTag(null, "smss");
serializer.endDocument();
os.close();
Toast.makeText(
context,
"备份短信成功,备份储存路径为:"
+ Environment.getExternalStorageDirectory()
+ "backSms.xml", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(context, "备份短信息失败!!", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="backSms"
android:text="@string/bt_queryAll" />
</RelativeLayout><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examp.backsms"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<!-- 获取 读写短信的权限 -->
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<!-- 获取写入SD卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.examp.backsms.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest><?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">0019短信备份</string>
<string name="action_settings">Settings</string>
<string name="bt_queryAll">备份短信</string>
</resources>
自制Android中的短息备份器源码,布布扣,bubuko.com
原文:http://blog.csdn.net/dong_martin/article/details/27347667