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; } }
相关文章推荐
- 一些有用的学习链接(AndroidStudio)
- Android PowerImageView实现,可以播放动画的强大ImageView
- android Handler 的使用
- android 技术总结 图片优化 sqlite使用 Fragment使用
- 一个帖子掌握android所有控件、ProgressBar 、Android 动画效果、SQLite、四大组件、Android多媒体
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- Android Android环境安装
- 使EditText不获取焦点(Android中系统输入法不主动弹出)
- Android ListView使用BaseAdapter与ListView的优化
- Android Framework GPS
- Android程序框架
- 正确导入android-support-v4.jar的方法
- android java.lang.noclassdeffounderror
- 避免double过大显示科学技术法
- 【进阶android】ListView源码分析——总述
- Android代码jar打包Library项目整合
- Android Studio--Gradle多渠道打包
- android audio
- Android 事件分发机制
- Android内存优化之封装九宫格