`

使用ContentObserver监视未接电话,未读短信

 
阅读更多

ContentObserver有点类似于BroadcastReceiver,当某类事件发生时进行调用.ContentObserver一般和系统或第三方程序提供的Provider一起使用.

当为某个URI注册了ContentObserver后,对其进行操作后都会调用注册的回调函数,以监视未接电话为例(未读短信和未接电话类似,只需将URI改为短信的URI就可以了):

// 注册ContentObserver   
getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, false, new MissedCallContentObserver(this,    
  
new Handler()));   
  
// 当有call log时,就会对这个类进行回调   
public class MissedCallContentObserver extends ContentObserver {   
       
    private Context ctx;   
       
    private static final String TAG = "MissedCallContentObserver";   
       
    public MissedCallContentObserver(Context context, Handler handler) {   
        super(handler);   
        ctx = context;   
    }   
  
    @Override  
    public void onChange(boolean selfChange) {   
           
        Cursor csr = ctx.getContentResolver().query(Calls.CONTENT_URI, new String[] {Calls.NUMBER,    
  
Calls.TYPE, Calls.NEW}, null, null, Calls.DEFAULT_SORT_ORDER);   
           
        if (csr != null) {   
            if (csr.moveToFirst()) {   
                int type = csr.getInt(csr.getColumnIndex(Calls.TYPE));   
                switch (type) {   
                case Calls.MISSED_TYPE:   
                    Log.v(TAG, "missed type");   
                    if (csr.getInt(csr.getColumnIndex(Calls.NEW)) == 1) {   
                        Log.v(TAG, "you have a missed call");   
                    }   
                    break;   
                case Calls.INCOMING_TYPE:   
                    Log.v(TAG, "incoming type");   
                    break;   
                case Calls.OUTGOING_TYPE:   
                    Log.v(TAG, "outgoing type");   
                    break;   
                }   
            }   
            // release resource   
            csr.close();   
        }   
    }   
       
    @Override  
    public boolean deliverSelfNotifications() {   
        return super.deliverSelfNotifications();   
    }   
}  
 
分享到:
评论
3 楼 luyi-jn 2010-03-18  
如何在开机时自动注册这个contentObserver监听短信和未接来电啊?
2 楼 风小却 2009-12-31  
风小却 写道
你好,请问短信的URI是哪个?我一直找不到呢。


啊。。。是这个么?

public static final Uri smsUri = Uri.parse("content://sms");
1 楼 风小却 2009-12-31  
你好,请问短信的URI是哪个?我一直找不到呢。

相关推荐

    Android中内容观察者的使用---- ContentObserver类详解

    本文将深入探讨ContentObserver的工作原理、如何使用以及其在实际应用中的实践。 一、ContentObserver概述 ContentObserver是一个抽象类,它提供了对ContentResolver中数据变更的监听功能。当ContentResolver中的...

    Android实现获取未接来电和未读短信数量的方法

    本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考。具体如下: 一、未读短信   首先注册Observer,当有新短信或彩信来的时候...

    Android 中使用ContentObserver模式获取短信用正则自动填充验证码

    主要介绍了Android 中使用ContentObserver模式获取短信用正则自动填充验证码,首先使用了ContentObserver监听短信,然后从短信中用正则的分组去拿到验证码,具体实现代码大家参考下本

    Android 使用ContentObserver监听数据库内容是否更改

    下面将详细介绍如何在Android中使用ContentObserver以及它的相关知识点。 1. **ContentObserver的用途** - ContentObserver主要用于监听ContentProvider中的数据变化,例如联系人、短信等。当ContentProvider中的...

    ContentObserver内容观察者

    ContentObserver内容观察者是Android系统中用于监听ContentProvider数据变化的一种机制...使用ContentObserver时,需注意正确地注册和注销,避免资源泄露,同时根据实际需求选择合适的Uri和notifyForDescendents参数。

    Android自学笔记-13-ContentObserver内容观察者

    本自学笔记将深入探讨ContentObserver的工作原理、使用场景以及如何实现它。 ContentObserver主要用于监控ContentResolver中的内容更改,这些内容通常存储在ContentProvider中。当某个ContentProvider的数据发生...

    contentprovider+contentobserver

    接下来,我们讨论ContentObserver。ContentObserver是Android提供的一种机制,用于监听ContentProvider中的数据变化。当数据发生变化时,ContentObserver会收到通知,从而触发相应的回调函数。在描述中提到的`...

    自定义ContentObserver监听数据库数据变化

    但要注意,`onChange()`方法可能会在主线程中调用,因此,如果有耗时的操作,应使用`Handler`或`AsyncTask`将其移到工作线程中执行,以免阻塞UI。 在应用不再需要监听数据库变化时,记得注销`ContentObserver`,...

    详解Android开发中ContentObserver类的使用

    首先,要使用ContentObserver,需要了解ContentProvider(内容提供者),因为ContentObserver是用来观察ContentProvider发出的内容变化通知。ContentProvider可以访问和管理数据,例如音频、视频、图片和通讯录等。...

    android 监听短信数据库

    查询参数中包含了`_id`(短信ID)、`address`(发送方电话号码)和`read`(是否已读状态)。条件语句`"address=?andread=?"`指定了具体的查询条件,即只查询特定发件人且未读的短信。查询结果存储在`Cursor`对象`...

    安卓开发-android电话、短信黑白名单拦截、电话录音.zip

    此外,还可以利用ContentObserver监视短信内容提供者,实现动态拦截和管理短信。 三、权限管理 实现上述功能需要申请相应的权限。电话拦截和录音功能需要READ_PHONE_STATE和CALL_PHONE权限,而短信拦截则需要READ_...

    android接收和发送短信

    综上所述,Android平台上的短信功能主要涉及`SMSManager`的使用来发送短信,以及`BroadcastReceiver`或数据库监听来接收短信。在实现过程中,需要注意权限的声明、异步接收的特性以及正确处理短信内容。通过这些知识...

    Android采取ContentObserver方式自动获取验证码

    接下来,我们创建一个继承自ContentObserver的类,例如`ReadSmsContent`,并在构造函数中传入Handler对象,Activity引用以及用于显示验证码的EditText控件: ```java public class ReadSmsContent extends ...

    Android短信例子大全

    总结来说,“Android短信例子大全”涵盖了Android应用处理短信的核心技术,包括使用`SmsManager`发送短信,注册BroadcastReceiver接收短信并展示通知,以及利用ContentObserver监听短信库的实时变化。这些知识对于...

    Content Observer Demo 源代码

    "Content Observer Demo 源代码" 是一个关于Android开发的示例项目,它演示了如何使用ContentObserver类来监听系统中的数据变化,特别是与短信(SMS)相关的数据变化。在这个项目中,开发者可以学习到如何实时监控...

Global site tag (gtag.js) - Google Analytics