短信读写

来源:互联网 发布:mac西柚色口红专柜价格 编辑:程序博客网 时间:2024/05/18 02:08

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);
}
“`

0 0