Android读取并备份用户短信(xml方式)

本文详细介绍了如何在Android应用中读取用户短信,并使用XML格式进行备份。首先,你需要在清单文件中添加读取和写入短信的权限。然后,通过Android的SMS Manager API获取短信列表,接着将这些短信转换为XML数据结构并保存到本地。这个过程涵盖了Android权限管理、SMS API的使用以及XML文件操作。

清单文件中需要加入两个权限:



MainActivity实现:

package com.mth.readMessage;

import java.io.File;
import java.io.FileOutputStream;
import org.xmlpull.v1.XmlSerializer;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Xml;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
 * 说明: 本程序的目的是通过创建xml文件在sd卡上
 * 		完成短信的备份
 * 
 */
public class MainActivity extends Activity {
	private Button read_message;
	// 短信备份的文件对象
	private File smsBackUpFile;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		read_message = (Button) findViewById(R.id.read);
		read_message.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				try {
					/*
					 * 创建一个存储备份短信的文件对象 (在sd卡上面创建一个叫sms.xml的文件对象)
					 */
					smsBackUpFile = new File(Environment
							.getExternalStorageDirectory(), "sms.xml");
					// 创建一个xml文件的生成器
					XmlSerializer xmlSerializer = Xml.newSerializer();
					// 完成序列化器初始操作
					FileOutputStream out = new FileOutputStream(smsBackUpFile);
					xmlSerializer.setOutput(out, "utf-8");

					// 内容提供者。
					ContentResolver resolver = getContentResolver();
					/*
					 * uri 查询什么样的路径(短信的路径) 
					 * projection 获取数据中的哪几列数据 
					 * selection  selectionArgs sortOrder 查询条件 可以都写null
					 */
					// 游标(结果集)
					Cursor cursor = resolver.query(Uri.parse("content://sms"),
							new String[] { "address", "date", "type", "body" },
							null, null, null);

					/**
					 * 生成的xml文件格式
					 *  <smss> 
					 *  	<sms> 
					 * 			<address>110</address>
					 * 			<body>nihao a</body> 
					 * 			<date>时间</date> 
					 * 			<type>类型</type>
					 * 	</sms>
					 *  </smss>
					 */

					/**
					 * 生成xml文件的头
					 */
					xmlSerializer.startDocument("utf-8", true);
					/**
					 * 生成根节点
					 */
					xmlSerializer.startTag(null, "smss");
					while (cursor.moveToNext()) {
						xmlSerializer.startTag(null, "sms");
						String address = cursor.getString(0);
						String date = cursor.getString(1);
						String type = cursor.getString(2);
						String body = cursor.getString(3);
						/**
						 * 地址
						 */
						xmlSerializer.startTag(null, "address");
						xmlSerializer.text(address);
						xmlSerializer.endTag(null, "address");
						/**
						 * date
						 */
						xmlSerializer.startTag(null, "date");
						xmlSerializer.text(date);
						xmlSerializer.endTag(null, "date");
						/**
						 * body
						 */
						xmlSerializer.startTag(null, "body");
						xmlSerializer.text(body);
						xmlSerializer.endTag(null, "body");
						/**
						 * type
						 */
						xmlSerializer.startTag(null, "type");
						xmlSerializer.text(type);
						xmlSerializer.endTag(null, "type");

						xmlSerializer.endTag(null, "sms");
					}
					cursor.close();
					/**
					 * 根节点配对
					 */
					xmlSerializer.endTag(null, "smss");
					/**
					 * 生成文档的结尾
					 */
					xmlSerializer.endDocument();
					/**
					 * 关闭输出流
					 */
					out.close();
					Toast.makeText(getApplicationContext(), "短信备份成功!",
							Toast.LENGTH_LONG).show();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值