您的位置:首页 > 移动开发 > Android开发

android ContentObserver监听系统短信和备份短信到本地

2015-06-16 11:14 225 查看
contentProvider中的一个工具,记录一下。

监听短信:

package com.example.messagedemo;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//监听系统短信
ContentResolver resolver = getContentResolver();
//注册一个监听系统短息数据库
resolver.registerContentObserver(Uri.parse("content://sms/"), true, new MyContentObservice(new Handler()));
}

//内容观察者
class MyContentObservice extends ContentObserver{

private static final String TAG = "MyContentObservice";

public MyContentObservice(Handler handler) {
super(handler);
}

@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);

Log.i(TAG, "短信发生改变");

Uri uri = Uri.parse("content://sms/outbox");
ContentResolver resolver = getContentResolver();
//查询发件箱内容
Cursor cursor = resolver.query(uri, new String[] {"address","date","body"}, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String address = cursor.getString(0);
long date = cursor.getLong(1);
String body = cursor.getString(2);

Log.i(TAG, "号码 : " + address + ", 日期 : " + date + ", 内容 : " + body);
}
cursor.close();
}
}

}
}

备份短信:

package com.example.savemessage2local;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlSerializer;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
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;

public class MainActivity extends Activity {

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

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

@Override
public void onClick(View v) {
// 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);
if (cursor != null && cursor.getCount() > 0) {
List<SmsInfo> smsList = new ArrayList<SmsInfo>();
SmsInfo sms;
while (cursor.moveToNext()) {
sms = new SmsInfo();
sms.setId(cursor.getInt(0));
sms.setAddress(cursor.getString(1));
sms.setDate(cursor.getLong(2));
sms.setType(cursor.getInt(3));
sms.setBody(cursor.getString(4));
smsList.add(sms);
}
cursor.close();

// 2.序列化到本地
writeToLocal(smsList);
}
}
});
}

private void writeToLocal(List<SmsInfo> smsList){

try {
//得到序列化对象
XmlSerializer serializer = Xml.newSerializer();

//	    	File path = Environment.getExternalStorageDirectory();
FileOutputStream fos = new FileOutputStream("/mnt/sdcard/sms.xml");
serializer.setOutput(fos, "utf-8");

serializer.startDocument("utf-8", true);
serializer.startTag(null, "smss");
for (SmsInfo smsInfo : smsList) {
serializer.startTag(null, "sms");
serializer.attribute(null, "id", String.valueOf(smsInfo.getId()));
//写地址
serializer.startTag(null, "address");
serializer.text(smsInfo.getAddress());
serializer.endTag(null, "address");

//写时间
serializer.startTag(null, "date");
serializer.text(String.valueOf(smsInfo.getDate()));
serializer.endTag(null, "date");

//写类型
serializer.startTag(null, "type");
serializer.text(String.valueOf(smsInfo.getType()));
serializer.endTag(null, "type");

//写信息
serializer.startTag(null, "body");
serializer.text(smsInfo.getBody());
serializer.endTag(null, "body");

serializer.endTag(null, "sms");

}

serializer.endTag(null, "smss");

serializer.endDocument();

Toast.makeText(this, "备份成功", 0).show();
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(this, "备份失败", 0).show();
e.printStackTrace();
}

}
}
工具类:

package com.example.savemessage2local;

public class SmsInfo {
private int id;
private String address;
private long date;
private int type;
private String body;
@Override
public String toString() {
return "SmsInfo [id=" + id + ", address=" + address + ", date=" + date
+ ", type=" + type + ", body=" + body + "]";
}
public SmsInfo() {
super();
// TODO Auto-generated constructor stub
}
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: