android103 内容观察者-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

android103 内容观察者

简介:
#内容观察者
* 通过内容提供者可以访问到数据库,当数据库数据改变时,内容提供者会发出通知,在内容提供者的uri上注册一个内容观察者,就可以收到数据改变的通知,类似于广播接受者,但是他不是广播。

        cr.registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
        
        class MyObserver extends ContentObserver{

            public MyObserver(Handler handler) {
                super(handler);
                // TODO Auto-generated constructor stub
            }
    
            //内容观察者收到数据库发生改变的通知时,会调用此方法
            @Override
            public void onChange(boolean selfChange) {

            }
        
        }
* 在内容提供者中发通知的代码

        ContentResolver cr = getContext().getContentResolver();
        //发出通知,所有注册在这个uri上的内容观察者都可以收到通知
        cr.notifyChange(uri, null);
复制代码
复制代码
package com.itheima.contentobserver;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.view.Menu;

public class MainActivity extends Activity {
    /*
    01项目当数据库改变时:发送数据改变的通知,uri:通知发送到哪一个uri上,所有注册在这个uri上的内容观察者都可以收到这个通知
    getContext().getContentResolver().notifyChange(uri, null);
    */
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册一个内容观察者,监听短信数据库内容的改变
        ContentResolver cr = getContentResolver();
        //uri:监听哪个uri上的内容提供者的通知
        //notifyForDescendents:如果是true,那么只要以content://sms开头的uri的数据库数据改变,都能收到通知,比如content://sms/inbox,如果是false则只能收到content://sms的地址的数据改变,
        cr.registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
    }
    
    class MyObserver extends ContentObserver{
        public MyObserver(Handler handler) {
            super(handler);
        }
        
        //收到数据改变的通知,此方法调用
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            System.out.println("短信数据库改变");
        }
    }
}
复制代码
复制代码
package com.itheima.listener;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.database.ContentObserver;
import android.view.Menu;
//08项目
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册内容观察者
        getContentResolver().registerContentObserver(Uri.parse("content://com.itheima.people"), true, 
                new ContentObserver(new Handler()) {
                        @Override
                        public void onChange(boolean selfChange) {
                            // TODO Auto-generated method stub
                            super.onChange(selfChange);
                            System.out.println("01项目的数据库改变了");
                        }
                });
    }


    
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4973162.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章