上几节学习了ContentProvider的实际用途,读取短信。插入短信,读取联系人。插入联系人等。 本节课在学习ContentProvider的观察者。

在生活中有第三方的软件。比方什么短信软件。此短信软件是替代了系统中自带的短信软件。当然可读取短信就是利用的ContentProvider。可是此等软件为何能实时的把接受的短信显示出来呢?  这就用到我们的内容观察者。

什么是内容观察者呢?  就是一直在观察系统是否有新短信。假设有新短信就会提示第三方软件赶快去数据库中取短信信息。这样就能实时的获取系统的短信了

举例说明:

public class MyContentObserverActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_readcontact);
        /**
         * uri: 监听的是那个uri上的内容提供者的通知
         * true:代表的是"content://sms", content://sms/inbox", "content://sms/outbox"都能够匹配
         * false: 代表的是: "content://sms"仅仅匹配这个
         * 当数据改变后就会调用这个匿名类中的onchange方法
         */
        getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,
                new ContentObserver(new Handler()) {
            
                @Override
                public void onChange(boolean selfChange) {
                    // TODO Auto-generated method stub
                    //super.onChange(selfChange);
                    Log.i("MyContentObserverActivity", "有新消息了!!!");
                    ContentResolver cResolver = getContentResolver();
                    /**
                     * uri: 是短信提供者的url,能够通过查看源代码获得
                     * projection:须要查询的几个字段,关心那个查询按个即可
                     * 按日期排序,取最后一个
                     */
                    Cursor cursor = cResolver.query(Uri.parse("content://sms"), new String[]{"address", "date", "type", "body"},
                            null, null, "date");
                    if(cursor.moveToLast())
                    {
                        String address = cursor.getString(cursor.getColumnIndex("address"));
                        String date = cursor.getString(cursor.getColumnIndex("date"));
                        String type = cursor.getString(cursor.getColumnIndex("type"));
                        String body = cursor.getString(cursor.getColumnIndex("body"));
                        
                        Log.i("ReadMessageActivity", address + ";" + date + ";" + type + ";" + body);
                    }
                }
        });
    }
}

然后你能够在模拟器上发送一条短信,这时候你就会看到控制台有短信信息输出

这样就取到最新的消息了。

今天就到这里。

Android 四大组件学习之ContentProvider五的更多相关文章

  1. Android 四大组件学习之ContentProvider二

    上节学习了什么是ContentProvider.以及ContentProvider的作用.以及什么是URL.本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider 好.实践是 ...

  2. Android 四大组件学习之ContentProvider三

    上节课学习怎样自己创建一个ContentProvider.以及用ContentResolver去操作ContentProvider. 今天我们用系统提供的ContentProvider. 先来个简单的 ...

  3. Android 四大组件学习之ContentProvider四

    上节我们学习了怎样去读取系统短信以及插入一条短信到系统中. 本节我们学习怎样获取系统的联系人,以及插入一条联系人 好.废话不多说了,直接操作. 首先和读取短信一样,先找到联系人在数据库中的位置. wa ...

  4. Android 四大组件学习之Service五

    本节学习IntentService, 可能就有人问了. 什么是IntentService, IntentService有什么作用? 不是已经有了Service,那为什么还要引入IntentServic ...

  5. android四大组件学习总结以及各个组件示例(1)

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  6. Android 四大组件学习之Server一

    上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...

  7. Android 四大组件学习之BroadcastReceiver一

    本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...

  8. Android四大组件之一:ContentProvider(内容提供者)

    Android中还提供了名为ContentProvider(内容提供者),可以向其他应用提供数据,但不常用,除非是同一公司开发的App,可以向不同应用提供数据.虽然为Android的四大组件之一,但用 ...

  9. android四大组件学习总结以及各个组件示例(2)

    上篇博文讲解了activity.content provider,此篇博文来仔细总结service.broadcast receiver: 3. Service >什么是服务?>windo ...

随机推荐

  1. python--修改默认递归层级

    import sys sys.setrecursionlimit(最大递归次数)

  2. 【BZOJ3527】[ZJOI2014] 力(FFT)

    题目: BZOJ3527 分析: FFT应用第一题-- 首先很明显能把\(F_j\)约掉,变成: \[E_j=\sum _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

  3. RESTful 设计理论

    RESTful 设计: 1.协议通信协议:https 2.域名部署在API专用域名下,除非API很简单(https://www.example.com/api)https://api.example. ...

  4. 关于jquery $.browser 报错问题

    在调用 jquery 插件时,出现$.browser 报错,原来是jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version 等属性, 取而代之的是 $.su ...

  5. IP访问频率限制不能用数组循环插入多个限制条件原因分析及解决方案

    14.IP频率限制不能用数组循环插入多个限制条件原因分析及解决方案: define("RATE_LIMITING_ARR", array('3' => 3, '6' => ...

  6. [Windows Server 2003] 安装IIS6.0及FTP

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装IIS6. ...

  7. 易语言 打开exe可执行文件、打开网页

    打开文件--------按钮被单击事件 直接复制以下代码即可 .版本 2 .子程序 _按钮58_被单击 运行 (“exe文件路径”, 假, ) 打开网站--------按钮被单击事件 直接复制以下代码 ...

  8. 設置VS2015

    減少VsHub的資源占用 VsHub在某些環境下會挂,原因見這個帖子 其作用簡述如下: First, the service that detects and auto-updates extensi ...

  9. CSS平滑过渡动画:transition

    <html> <head> <link href="http://cdn.bootcss.com/twitter-bootstrap/3.0.2/css/boo ...

  10. Nagios事件机制实践

    Nagios事件机制实践  blog地址:http://www.cnblogs.com/caoguo 一.事件触发执行脚本 [root@Nagios ~]# cd /usr/local/nagios/ ...