清单文件中需要加入两个权限:
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();
}
}
});
}
}
本文详细介绍了如何在Android应用中读取用户短信,并使用XML格式进行备份。首先,你需要在清单文件中添加读取和写入短信的权限。然后,通过Android的SMS Manager API获取短信列表,接着将这些短信转换为XML数据结构并保存到本地。这个过程涵盖了Android权限管理、SMS API的使用以及XML文件操作。
&spm=1001.2101.3001.5002&articleId=18399625&d=1&t=3&u=67a85d41d210451b8d291a435230c2b7)
553

被折叠的 条评论
为什么被折叠?



