上几节学习了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. JavaScript--编程练习1

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElementById( ...

  2. Context的正确使用

    一.Context的作用 Context的最大作用就是我们可以通过传递它来获得其他Activity或Application的相关资源和方法,它就相当于它们的引用,我们通过引用来获得对象的封装,这也是我 ...

  3. cmd bat 相对命令

    "%~dp0",在BAT中,是不是“相对路径”的意思 (2013-08-21 12:19:32) 转载▼ 标签: 杂谈 分类: C# 0念 零 ,代表你的批处理本身. d p是FO ...

  4. C#最实用的快捷键

    Ctrl+J(Alt+→):智能提示. Ctrl+X:删除整行. Shift+Alt+Enter:全屏切换 F12:跳转到定义. Ctrl+-.Ctrl+Shift+-:上一步.下一步(仅限于使用过上 ...

  5. MVC系列学习(十三)-合并JS和CSS

    1.先来看看,不用合并js的情况,传输量大 1.1新建一个 [基本]的mvc项目 然后新建一个控制器HomeController,因为js会在很多视图中用到,所以此时我们添加一个视图带布局页Index ...

  6. 【转】Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  7. php中的抽象方法和抽象类

    1.什么是抽象方法?    我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...

  8. CSS——轮播图中的箭头

    注意事项: 1.定位中left权重比right高,top权重比bottom高 2.两个span标签嵌套在一个盒子中,将来显示隐藏只需要控制父盒子就行了 <!DOCTYPE html> &l ...

  9. SQLServer 异常捕获,回滚,再抛出

    一个存储过程中多个更新操作,后面的更新操作出现异常,如果不手动回滚前面修改的数据是不会自动撤销的! BEGIN TRY BEGIN TRAN -- ..... COMMIT TRAN END TRY ...

  10. java 类名.this

    类名为this的限定词. 相对于内部类:有多个this: 1.内部类本身的this: 2.内部类的环境类的this: 类名.this,就是为了对这些this指针的指向做出限定. 区别于类名.class ...