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

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 {@Overrideprotected 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);}@Overridepublic 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 {@Overrideprotected 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() {@Overridepublic 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 smsList = new ArrayList();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 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 blockToast.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;@Overridepublic 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;}}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部