Android下关于手机中的数据存储在:data/data/com.android.providers/telephony下,
其中短信存在:telephony/mmssms.db
电话存在:telephony/telephony.db
通过ContentProvider来读取手机中的短信数据库。
content://authorities/code
短信备份(读):
1.添加权限
2.写入sdcard权限
代码:“`
1.首先创建短信实体类 SmsInfo.java
class SmsInfo{
/**
* 短信id
*/
private int id;
/**
* 短信号码
*/
private String address;
/**
* 短信日期
*/
private long date;
/**
* 短信类型(发 / 收)
*/
private int type;
/**
* 短信内容
*/
private String body;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public long getDate() {
return date;
}
public void setDate(long 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.备份短信,序列化到本地
/**
* 备份短信
*/
public void backupSms(){
// 1.查出所有的短信
Uri uri = Uri.parse("content://sms/");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"_id", "address", "date", "type", "body"}, null, null, null);
List<SmsInfo> smsInfoList = new ArrayList<SmsInfo>();
if(cursor!=null && cursor.getCount()>0){
SmsInfo smsInfo;
while (cursor.moveToNext()){
smsInfo = new SmsInfo();
smsInfo.setId(cursor.getInt(0));
smsInfo.setAddress(cursor.getString(1));
smsInfo.setDate(cursor.getLong(2));
smsInfo.setType(cursor.getInt(3));
smsInfo.setBody(cursor.getString(4));
smsInfoList.add(smsInfo);
}
cursor.close();
}
// 2.序列化到本地
writeToLocal(smsInfoList);
}
/**
* 序列化到本地
* @param smsInfoList
*/
private void writeToLocal(List<SmsInfo> smsInfoList) {
XmlSerializer xmlSerializer = Xml.newSerializer();
// 指定输出位置
File file = new File(Environment.getExternalStorageDirectory(), "sms.xml");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
// 设置编码方式
xmlSerializer.setOutput(fos, "utf-8");
xmlSerializer.startDocument("utf-8", true);
xmlSerializer.startTag(null, "SmsInfos");
for(SmsInfo smsInfo : smsInfoList){
xmlSerializer.startTag(null, "SmsInfo");
xmlSerializer.attribute(null, "id", String.valueOf(smsInfo.getId()))
xmlSerializer.startTag(null, "address");
xmlSerializer.text(String.valueOf(smsInfo.getAddress()));
xmlSerializer.endTag(null, "address");
xmlSerializer.startTag(null, "date");
xmlSerializer.text(String.valueOf(smsInfo.getDate()));
xmlSerializer.endTag(null, "date");
xmlSerializer.startTag(null, "type");
xmlSerializer.text(String.valueOf(smsInfo.getType()));
xmlSerializer.endTag(null, "type");
xmlSerializer.startTag(null, "body");
xmlSerializer.text(String.valueOf(smsInfo.getBody()));
xmlSerializer.endTag(null, "body");
xmlSerializer.endTag(null, "SmsInfo");
}
xmlSerializer.endTag(null, "SmsInfos");
xmlSerializer.endDocument();
xmlSerializer.flush();
Toast.makeText(this, "备份成功", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "备份失败", Toast.LENGTH_LONG).show();
}
}
===========================================
写短信:
需要权限:
代码:`
private void writeSms(){
Uri uri = Uri.parse(“content://sms/”);
ContentResolver resolver = getContentResolver();
ContentValues values = new ContentValues();
values.put(“address”, “65566”); // 发信人
values.put(“type”, “1”); // 接收短信
values.put(“body”, “Hello,我是65566”);
resolver.insert(uri, values);
}
“`