码迷,mamicode.com
首页 > 移动开发 > 详细

Android 四大组件学习之ContentProvider五

时间:2015-07-24 18:20:31      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:contentobserver

上几节学习了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五

标签:contentobserver

原文地址:http://blog.csdn.net/longwang155069/article/details/47043821

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!