android ContentObserver监听系统短信和备份短信到本地
生活随笔
收集整理的這篇文章主要介紹了
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<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 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;}}
總結
以上是生活随笔為你收集整理的android ContentObserver监听系统短信和备份短信到本地的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北交所股票在哪显示
- 下一篇: android 网络图片查看器,Hand